1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <cstdio>
#include <vector>
using std::vector;

const int M = 501013;

int k;
int n[M];
vector<int> c[M], ww, e;

int main() {
  scanf("%d %d", &k, &n[1]);
  c[1] = vector<int>(n[1]);
  for (int i = 2; i <= k; i++) {
    scanf("%d", &n[i]);
    c[i].resize(n[i]);
    for (int j = 0; j < n[i]; j++) scanf("%d", &c[i][j]);
  }
  ww = vector<int>(n[k]+1);
  for (int i = k; i >= 1; i--) {
    e = vector<int>(n[i-1]+1);
    for (int j = 0; j < n[i]; j++) {
      if (ww[j+1] == 0 && ww[0] > 0) {
        ww[j+1] = 1;
        ww[0]--;
      }
      if (ww[j+1] == 0) ww[j+1] = 1;
      e[c[i][j]] += ww[j+1];
    }
    e[0] += ww[0];
    ww = e;
  }
  printf("%d\n", ww[0]);
  return 0;
}