#include <bits/stdc++.h>
using namespace std;
const int MX=500500;
int n,x,sz[MX];
vector<vector<int>> g[MX];
vector<int> dp[MX];
int main() {
scanf("%d%d",&n,&sz[0]);
g[0].resize(sz[0]);
dp[0].resize(sz[0]);
for (int i=1; i<n; i++) {
scanf("%d",&sz[i]);
g[i].resize(sz[i]);
dp[i].resize(sz[i]);
for (int j=0; j<sz[i]; j++) {
scanf("%d",&x);
if (x) g[i-1][x-1].push_back(j);
}
}
int mx=0;
for (int i=n-1; i>=0; i--) {
int cur=0;
for (int j=0; j<sz[i]; j++) {
for (int x: g[i][j]) dp[i][j]+=dp[i+1][x];
dp[i][j]=max(dp[i][j],1);
cur+=dp[i][j];
}
mx=max(mx,cur);
}
printf("%d\n",mx);
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; const int MX=500500; int n,x,sz[MX]; vector<vector<int>> g[MX]; vector<int> dp[MX]; int main() { scanf("%d%d",&n,&sz[0]); g[0].resize(sz[0]); dp[0].resize(sz[0]); for (int i=1; i<n; i++) { scanf("%d",&sz[i]); g[i].resize(sz[i]); dp[i].resize(sz[i]); for (int j=0; j<sz[i]; j++) { scanf("%d",&x); if (x) g[i-1][x-1].push_back(j); } } int mx=0; for (int i=n-1; i>=0; i--) { int cur=0; for (int j=0; j<sz[i]; j++) { for (int x: g[i][j]) dp[i][j]+=dp[i+1][x]; dp[i][j]=max(dp[i][j],1); cur+=dp[i][j]; } mx=max(mx,cur); } printf("%d\n",mx); return 0; } |
English