과제 제출하기

시간 제한1초메모리 제한1024 MB

요약
M개의 문제를 서로 다른 날에 배정하고 각 지식을 언제 공부할지 정해, 모든 문제를 풀 때 필요한 지식이 유효하도록 하면서 공부 횟수를 최소화한다.
난이도

보통10점 중 7점

유형
완전 탐색, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

성현이가 배우는 과목은 NN개의 지식을 포함한다. 지식은 1부터 NN까지의 정수로 나타낼 수 있다.

성현이는 MM개의 모든 문제를 풀어서 제출해야 한다. 한 문제를 푸는 데는 하루가 걸리고, 성현이는 문제를 푸는 순서를 마음대로 정할 수 있다. 따라서 성현이는 1일, 2일, ⋯\cdots, MM일에 문제를 각각 하나씩 풀어야 한다.

각 문제를 풀기 위해서는 각 문제가 요구하는 지식이 필요하다. ii번째 문제를 해결하기 위해서는 a_i,1a\_{i,1}번, a_i,2a\_{i,2}번, ⋯\cdots, a_i,k_ia\_{i,k\_i}번의 총 k_ik\_i개의 지식이 필요하다.

또한 지식은 배운 순간부터 어느 정도의 시간이 지나면 까먹게 되는데, nn번 지식은 공부한 날로부터 d_nd\_n일이 지나면 까먹게 된다. 즉, 성현이가 nn번 지식을 xx일에 공부하면, (x+d_n)(x+d\_n)일에 성현이는 nn번 지식을 까먹은 상태가 된다. 그래서 (x+d_n)(x+d\_n)일에 성현이는 지식을 다시 공부해야 할 수도 있다. 성현이는 하루에 여러 개의 지식을 동시에 배울 수도 있다.

성현이는 최소 횟수로 지식을 공부하고 MM개의 문제를 해결하고 싶다. 성현이가 모든 문제를 해결하기 위해 지식을 공부해야 하는 최소 횟수를 구해보자.

입력

입력은 다음과 같이 주어진다.

NN MM

d_1d\_1 d_2d\_2 ⋯\cdots d_Nd\_N

k_1k\_1 a_1,1a\_{1,1} a_1,2a\_{1,2} ⋯\cdots a_1,k_1a\_{1,k\_1}

k_2k\_2 a_2,1a\_{2,1} a_2,2a\_{2,2} ⋯\cdots a_2,k_2a\_{2,k\_2}

⋯\cdots

k_Mk\_M a_M,1a\_{M,1} a_M,2a\_{M,2} ⋯\cdots a_M,k_Ma\_{M,k\_M}

첫 줄에 지식의 개수 NN, 성현이가 풀어야 하는 문제의 수 MM가 공백으로 구분되어 주어진다.

다음 줄에는 각 지식을 까먹게 되는 시간 d_id\_i가 공백으로 구분되어 주어진다.

이어 MM줄에 걸쳐 k_ik\_i가 주어지고 k_ik\_i개의 정수 a_i,ja\_{i,j}가 공백으로 구분되어 주어진다.

a_i,ja\_{i,j}는 성현이가 ii번째 문제를 해결하기 위해 필요한 지식의 번호이다.

출력

성현이가 지식을 공부해야 하는 최소 횟수를 출력한다.

제한

  • 1≤N≤1,0001 \leq N \leq 1\\,000
  • 1≤M≤71 \leq M \leq 7
  • 1≤d_i≤M1 \leq d\_i \leq M
  • d_id\_i는 모두 정수이다.
  • 1≤k_i≤N1 \leq k\_i \leq N
  • 1≤a_i,j≤N1 \leq a\_{i,j} \leq N
  • 모든 1≤i≤M1 \leq i \leq M에 대해 a_i,j<a_i,j+1a\_{i,j} < a\_{i,j+1}이다. (1≤j≤k_i−1)(1 \leq j \leq k\_i-1)

예제2

  1. 예제 1

    입력
    3 3
    3 1 2
    2 1 3
    2 2 3
    1 1
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3 3
    2 2 2
    2 1 2
    1 3
    2 1 2
    
    예상 출력
    3