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
#include <cstdio>
#include <vector>
using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define PB push_back
#define SIZE(c) ((int)(c).size())
#define INT(x) int x; scanf("%d", &x)

typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<bool> VB;
typedef vector<VB> VVB;

int d[500001];

int main() {
	INT(k);
	INT(n1);
	VVI b;
	VVB u;
	b.PB(VI(n1));
	u.PB(VB(n1));
	FOR(i,1,k) {
		INT(ni);
		b.PB(VI(ni, i));
		u.PB(VB(ni));
		REP(j,ni) {
			INT(a);
			if (!a) continue;
			--a;
			b[i][j] = b[i - 1][a];
			u[i - 1][a] = 1;
		}
	}
	REP(i,k) REP(j,SIZE(b[i])) if (!u[i][j]) {
		++d[b[i][j]];
		--d[i + 1];
	}
	int x = 0, r = 0;
	REP(i,k) {
		x += d[i];
		r = max(r, x);
	}
	printf("%d\n", r);
}