#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int k;
cin >> k;
vector<int> n(k);
cin >> n[0];
vector<vector<int>> a(k);
for(int i = 1; i < k; ++i) {
cin >> n[i];
a[i].resize(n[i], 0);
for(int j = 0; j < n[i]; ++j) {
cin >> a[i][j];
}
}
vector<vector<int>> dp(k);
for(int i = 0; i < k; ++i) {
dp[i].resize(n[i]);
}
for(int i = 0; i < n[k - 1]; ++i) {
dp[k - 1][i] = 1;
}
for(int i = k - 1; i >= 1; --i) {
for(int j = 0; j < n[i]; ++j) {
if(a[i][j] == 0) {
continue;
}
int idx = a[i][j] - 1;
dp[i - 1][idx] += dp[i][j];
}
for(int x = 0; x < n[i - 1]; ++x) {
if(dp[i - 1][x] == 0) {
dp[i - 1][x] = 1;
}
}
}
int ans = 0;
for(int i = 0; i < k; ++i) {
int sum = 0;
for(int j = 0; j < n[i]; ++j) {
sum += dp[i][j];
}
ans = max(ans, sum);
}
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int k; cin >> k; vector<int> n(k); cin >> n[0]; vector<vector<int>> a(k); for(int i = 1; i < k; ++i) { cin >> n[i]; a[i].resize(n[i], 0); for(int j = 0; j < n[i]; ++j) { cin >> a[i][j]; } } vector<vector<int>> dp(k); for(int i = 0; i < k; ++i) { dp[i].resize(n[i]); } for(int i = 0; i < n[k - 1]; ++i) { dp[k - 1][i] = 1; } for(int i = k - 1; i >= 1; --i) { for(int j = 0; j < n[i]; ++j) { if(a[i][j] == 0) { continue; } int idx = a[i][j] - 1; dp[i - 1][idx] += dp[i][j]; } for(int x = 0; x < n[i - 1]; ++x) { if(dp[i - 1][x] == 0) { dp[i - 1][x] = 1; } } } int ans = 0; for(int i = 0; i < k; ++i) { int sum = 0; for(int j = 0; j < n[i]; ++j) { sum += dp[i][j]; } ans = max(ans, sum); } cout << ans << '\n'; } |
English