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
77
78
79
80
81
82
83
#include<bits/stdc++.h>
using namespace std;

vector<vector<int>> graf(800102);

vector<int> wrac;


int dfs(int v,int dp){
    int sum=0;
    if(graf[v].size()==0){
        sum=1;
        wrac[dp]++;

    }
    for(auto u:graf[v]){
        sum+=dfs(u,dp+1);
    }return sum;
}

int main(){

    ios::sync_with_stdio(0);
    cin.tie(0);

    int k,n;
    cin>>k>>n;

    vector<int>old;
    wrac=vector<int>(k);
    int num=0;
    vector<pair<int,int>> starts;

    for(int i=0;i<n;i++){
        starts.push_back({num,0});
        old.push_back(num);
        num++;
    }

    for(int i=0;i<k-1;i++){
        vector<int> now;
        int ni;
        cin>>ni;
        for(int j=0;j<ni;j++){
            int ojc;
            cin>>ojc;
            now.push_back(num);
            if(ojc==0){
                starts.push_back({num,i+1});
              //  cout<<"Nowe: "<<num<<endl;
            }else{
                graf[old[ojc-1]].push_back(num);
              //  cout<<"Dodaje: "<<num<<" do: "<<old[ojc-1]<<endl;
            }
            num++;
        }old=now;

    }

    vector<int> warst(k,0);

    for(int i=0;i<starts.size();i++){
        int v=starts[i].first;
        int wr=starts[i].second;
        warst[wr]+=dfs(v,wr);
      //  cout<<"warstwa: "<<wr<<"suma: "<<warst[wr]<<endl;
    }

    int raz=0;
    int wol=0;


    for(int i=0;i<k;i++){
        int pot=warst[i];
        int wra=wrac[i];
        if(pot>wol){
            raz+=(pot-wol);
            wol+=(pot-wol);
        }wol-=pot;
        wol+=wra;
    }cout<<raz<<endl;

}