#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
int k, n1; cin >> k >> n1;
vector<vector<int>>a(k + 1), dp(k + 1);
dp[1].assign(n1, 1);
for (int i = 2; i <= k; i++) {
int ile; cin >> ile;
a[i].resize(ile);
dp[i].assign(ile, 1);
for (auto &x: a[i]) {
cin >> x;
--x;
if (x != -1) dp[i-1][x] = 0;
}
}
int ans = 0;
for (int i = k; i >= 2; i--) {
for (int j = 0; j < (int)a[i].size(); j++) {
if (a[i][j] != -1) {
dp[i - 1][a[i][j]] += dp[i][j];
}
}
ans = max(ans, accumulate(dp[i].begin(), dp[i].end(), 0ll));
// cout << i << ": ";
// for (auto x: dp[i]) cout << x << " ";
// cout << endl;
}
ans = max(ans, accumulate(dp[1].begin(), dp[1].end(), 0ll));
cout << ans << endl;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
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 33 34 35 36 37 38 39 40 41 42 43 | #include <bits/stdc++.h> using namespace std; #define int long long void solve() { int k, n1; cin >> k >> n1; vector<vector<int>>a(k + 1), dp(k + 1); dp[1].assign(n1, 1); for (int i = 2; i <= k; i++) { int ile; cin >> ile; a[i].resize(ile); dp[i].assign(ile, 1); for (auto &x: a[i]) { cin >> x; --x; if (x != -1) dp[i-1][x] = 0; } } int ans = 0; for (int i = k; i >= 2; i--) { for (int j = 0; j < (int)a[i].size(); j++) { if (a[i][j] != -1) { dp[i - 1][a[i][j]] += dp[i][j]; } } ans = max(ans, accumulate(dp[i].begin(), dp[i].end(), 0ll)); // cout << i << ": "; // for (auto x: dp[i]) cout << x << " "; // cout << endl; } ans = max(ans, accumulate(dp[1].begin(), dp[1].end(), 0ll)); cout << ans << endl; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; } |
English