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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
#include <cassert>
using namespace std;

#define FOR(i, n) for (int i = 0, __n = (n); i < __n; i++)

int main()
{
  int k, n1;
  scanf("%d%d", &k, &n1);

  vector<vector<int> > V(k);
  vector<vector<int> > W(k);
  W[0].resize(n1);

  for(int i = 1; i < k; i++) {
    int n;
    scanf("%d", &n);
    V[i].resize(n);
    W[i].resize(n, 0);
    FOR(j, n)
      scanf("%d", &V[i][j]);
  }

  int res = 0;

  for(int i = k - 1; i >=0 ; i--) {
    int loc = 0;
    FOR(j, W[i].size()) {
      if (W[i][j] == 0) W[i][j] = 1;
      loc += W[i][j];
    }

    res = max(res, loc);

    FOR(j, V[i].size()) {
      int v = V[i][j];
      if(v == 0) continue;
      v--;
      W[i-1][v] += W[i][j];
    }
  }


  printf("%d\n", res);
  return 0;
}