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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
#define pii pair<ll,ll>
#define vii vector<pair<ll,ll>>
#define vi vector<ll>
#define pll pair<ll, ll>
#define all(x) (x).begin(),(x).end()
#define siz(x) (ll)(x).size()
#define count_bits(x) __builtin_popcountll((x))
const ll M = 1e9+7;
const ll INF = 1e9;
//mt19937 mt;void random_start(){mt.seed(chrono::time_poll_cast<chrono::milliseconds>(chrono::high_resolution_clock::now()).time_since_epoch().count());}
//ll los(ll a, ll b) {return a + (mt() % (b-a+1));}
typedef tree<ll, null_type, less<ll>, rb_tree_tag,tree_order_statistics_node_update> ordered_set;

const ll MAXN = 2e6 + 5;

ll delta[MAXN];
ll ile[MAXN];
ll cnt = 1;
vi ktore[MAXN];
ll start[MAXN];
ll gl[MAXN];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll n, k;
    cin >> n >> k;
    for(ll i = 0; i < k; ++i){
        ktore[1].push_back(cnt);
        start[cnt] = 1;
        gl[cnt] = 1;
        cnt++;
    }
    ll w;
    for(ll i = 2; i <= n; ++i){
        ll x;
        cin >> x;
        for(ll j = 0; j < x; ++j){
            cin >> w;
            ktore[i].push_back(cnt);
            gl[cnt] = i;
            if(w == 0){ 
                start[cnt] = i;
            }
            else{
                ll p = ktore[i-1][w-1];
                start[cnt] = start[p];
                ile[p]++;
            }
            cnt++;
        }
    }
    cnt--;
    for(ll i = 1; i <= cnt; ++i){
        if(ile[i] == 0){
            delta[gl[i]+1]--;
            delta[start[i]]++;
        }
    }
    ll mx = delta[1];
    ll curr = delta[1];
    for(ll i = 2; i <= n; ++i){
        curr += delta[i];
        mx = max(mx, curr);
    }
    cout << mx << "\n";
    return 0;
}