#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);
}
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); } |
English