#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
ll k, n1;
cin >> k >> n1;
vector<ll> n(k);
n[0] = n1;
vector<vector<ll>> p(k);
for (ll i = 1; i < k; i++) {
cin >> n[i];
p[i].resize(n[i]);
for (ll j = 0; j < n[i]; j++) {
cin >> p[i][j];
p[i][j]--;
}
}
vector<ll> v(n[k - 1], 1);
ll wynik = n[k - 1];
for (ll d = k - 1; d >= 1; d--) {
vector<ll> nv(n[d - 1], 0);
for (ll j = 0; j < n[d]; j++) {
ll r = p[d][j];
if (r >= 0)
nv[r] += v[j];
}
ll sm = 0;
for (ll j = 0; j < n[d - 1]; j++) {
if (nv[j] == 0)
nv[j] = 1;
sm += nv[j];
}
wynik = max(wynik, sm);
v.swap(nv);
}
cout << wynik << '\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 | #include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios_base::sync_with_stdio(0), cin.tie(0); ll k, n1; cin >> k >> n1; vector<ll> n(k); n[0] = n1; vector<vector<ll>> p(k); for (ll i = 1; i < k; i++) { cin >> n[i]; p[i].resize(n[i]); for (ll j = 0; j < n[i]; j++) { cin >> p[i][j]; p[i][j]--; } } vector<ll> v(n[k - 1], 1); ll wynik = n[k - 1]; for (ll d = k - 1; d >= 1; d--) { vector<ll> nv(n[d - 1], 0); for (ll j = 0; j < n[d]; j++) { ll r = p[d][j]; if (r >= 0) nv[r] += v[j]; } ll sm = 0; for (ll j = 0; j < n[d - 1]; j++) { if (nv[j] == 0) nv[j] = 1; sm += nv[j]; } wynik = max(wynik, sm); v.swap(nv); } cout << wynik << '\n'; } |
English