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
#include <bits/stdc++.h>
using namespace std;
using ind = long long;
using cind = const ind;
#define FOR(i,l,r) for(ind i = (l); i <= (r); i++)
#define FORD(i,l,r) for(ind i = (l); i >= (r); i--)
#define DEBUG_ON false
#define debug if constexpr(DEBUG_ON)
#define err debug cerr

struct s{
    vector<ind> next;
    ind prev=0;
};
vector<s> v[500'001];
ind change[500'002];
ind dfs(ind layer, ind i){
    ind s=0;
    for(auto n : v[layer][i].next) s += dfs(layer+1, n);
    if(v[layer][i].next.size()==0) {s++; change[layer+1]++;}
    return s;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    ind k, n1;
    cin >> k >> n1;
    FOR(i,0,n1) v[1].push_back({});
    FOR(i,2,k){
        ind ni;
        cin >> ni;
        v[i].push_back({});
        FOR(j,1,ni){
            ind p;
            cin >> p;
            v[i].push_back({});
            v[i].back().prev = p;
            v[i-1][p].next.push_back(j);
        }
    }
    FOR(ki,1,k)  FOR(i,1,v[ki].size()-1) if(v[ki][i].prev == 0) change[ki] -= dfs(ki,i);
    ind w=0;
    ind mini=0;
    FOR(i,1,k){
        w+=change[i];
        mini = min(mini, w);
    }
    cout << -mini << '\n';
}