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
#include<bits/stdc++.h>
using namespace std;

inline int rd(){
    int x=0,c=getchar_unlocked();
    while(c<=32)c=getchar_unlocked();
    while(c>32){
        x=x*10+c-'0';
        c=getchar_unlocked();
    }
    return x;
}

int main(){
    int k=rd();
    vector<int> n(k+1);
    vector<vector<int>> a(k+1);
    n[1]=rd();
    for(int i=2;i<=k;i++){
        n[i]=rd();
        a[i].resize(n[i]);
        for(int j=0;j<n[i];j++)a[i][j]=rd();
    }
    vector<int> v(n[k],1);
    long long ans=n[k];
    for(int i=k;i>=2;i--){
        vector<int> s(n[i-1]+1),u(n[i-1]);
        for(int j=0;j<n[i];j++){
            int p=a[i][j];
            if(p)s[p]+=v[j];
        }
        long long cur=0;
        for(int j=1;j<=n[i-1];j++){
            u[j-1]=max(1,s[j]);
            cur+=u[j-1];
        }
        ans=max(ans,cur);
        v.swap(u);
    }
    printf("%lld\n",ans);
}