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
#include <cstdio>

int I[600000], P[600000], S[600000], C[600000];

int main(void) {
  int k, n, p, q, a;
  scanf("%d%d", &k, &n);
  p = 0;
  for (int j = 0; j < n; j++) {
    I[p+j] = 0;
    P[p+j] = -1;
    S[p+j] = 1;
    C[p+j] = 1;
  }
  q = p;
  p += n;
  for (int i = 1; i < k; i++) {
    scanf("%d", &n);
    for (int j = 0; j < n; j++) {
      scanf("%d", &a);
      I[p+j] = i;
      P[p+j] = a > 0? q+a-1: -1;
      S[p+j] = 1;
      C[p+j] = 1;
    }
    q = p;
    p += n;
  }
  for (int j = p-1; j >= 0; j--)
  if (P[j] > -1) {
    S[P[j]] += S[j] - C[P[j]];
    C[P[j]] = 0;
  }
  int s = 0, m = 0;
  for (int i = 0, j = 0; j < p; j++) {
    if (I[j] > i)
    {
      i = I[j];
      if (m < s) m = s;
      s = 0;
    }
    s += S[j];
  }
  if (m < s) m = s;
  printf("%d\n", m);
}