#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 4;
bitset<N> vis;
vector<int> dp[N];
vector<int> parent[N];
int main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
int k, n;
cin >> k >> n;
parent[1].resize(n + 1, 0);
dp[1].resize(n + 1, 0);
dp[0].resize(n + 1, 0);
for(int i = 2 ; i <= k ; i++){
cin >> n;
parent[i].resize(n + 1);
dp[i].resize(n + 1, 0);
for(int j = 1 ; j <= n ; j++){
cin >> parent[i][j];
}
}
int ans = 0;
for(int i = k ; i >= 1 ; i--){
int sum = 0;
for(int j = 1 ; j < (int)parent[i].size() ; j++){
if(dp[i][j] == 0) dp[i][j]++;
sum += dp[i][j];
dp[i - 1][parent[i][j]] += dp[i][j];
}
ans = max(sum, ans);
}
cout << ans << '\n';
}
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 | #include<bits/stdc++.h> using namespace std; const int N = 5e5 + 4; bitset<N> vis; vector<int> dp[N]; vector<int> parent[N]; int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int k, n; cin >> k >> n; parent[1].resize(n + 1, 0); dp[1].resize(n + 1, 0); dp[0].resize(n + 1, 0); for(int i = 2 ; i <= k ; i++){ cin >> n; parent[i].resize(n + 1); dp[i].resize(n + 1, 0); for(int j = 1 ; j <= n ; j++){ cin >> parent[i][j]; } } int ans = 0; for(int i = k ; i >= 1 ; i--){ int sum = 0; for(int j = 1 ; j < (int)parent[i].size() ; j++){ if(dp[i][j] == 0) dp[i][j]++; sum += dp[i][j]; dp[i - 1][parent[i][j]] += dp[i][j]; } ans = max(sum, ans); } cout << ans << '\n'; } |
English