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
51
52
53
54
55
56
57
58
59
60
61
#include <bits/stdc++.h>
int K,su[500009],num[500009],pa[500009],vq[500009],dep[500009],rt[500009];
inline int id(int x,int y) {
	return su[x-1]+y;
}
int sg[2000009];
#define ls (n<<1)
#define rs ((n<<1)|1)
#define md ((l+r)>>1)
int fd(int n,int l,int r,int L,int R) {
	if(sg[n]==0||r<L||R<l) return 0;
	if(l==r) {
		sg[n]--;
		return 1;
	}
	int a=fd(rs,md+1,r,L,R);
	if(a==0) a=fd(ls,l,md,L,R);
	sg[n]=sg[ls]+sg[rs];
	return a;
}
void up(int n,int l,int r,int p) {
	while(l<r) {
		sg[n]++;
		if(p<=md) n=ls,r=md;
		else n=rs,l=md+1;
	}
		sg[n]++;
}
signed main(void) {
	scanf("%d %d",&K,&num[1]);
	su[1]=num[1];
	for(int i=2;i<=K;i++) {
		scanf("%d",&num[i]);
		su[i]=su[i-1]+num[i];
		for(int j=1;j<=num[i];j++) {
			int x;scanf("%d",&x);
			dep[id(i,j)]=i-1;
			if(x) pa[id(i,j)]=id(i-1,x);
		//	printf("")
		}
	}
	for(int i=1;i<=su[K];i++) {
		if(pa[i]==0) {
			rt[i]=i;
		} else {
			rt[i]=rt[pa[i]];			
			vq[pa[i]]=1;
		}
	}
	int as=0;
	for(int i=1;i<=su[K];i++) {
		if(vq[i]) continue;
		as++;
		int l=dep[rt[i]],r=dep[i];
		l++;r++;
		//printf("%d %d\n",l,r);
		if(l>1) as-=fd(1,1,K,1,l-1);
		up(1,1,K,r);
	}
	printf("%d",as);
}