#include "bits/stdc++.h"
using namespace std;
using ll = long long;
int const N = 5e5+5;
int n[N], k;
vector <int> v[N];
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> k >> n[1];
for(int i = 2; i <= k; ++i){
cin >> n[i];
for(int j = 1; j <= n[i]; ++j){
int x; cin >> x;
v[i].push_back(x);
}
}
ll ans = n[k];
vector <ll> a(n[k]+1, 1);
for(int i = k; i > 1; --i){
vector <ll> b(n[i-1]+1, 0);
for(int j = 1; j <= n[i]; ++j){
if(v[i][j-1] == 0) continue;
b[v[i][j-1]] += a[j];
}
ll sum = 0;
for(int j = 1; j <= n[i-1]; ++j){
b[j] = max(1LL, b[j]);
sum += b[j];
}
ans = max(ans, sum);
a = move(b);
}
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; using ll = long long; int const N = 5e5+5; int n[N], k; vector <int> v[N]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> k >> n[1]; for(int i = 2; i <= k; ++i){ cin >> n[i]; for(int j = 1; j <= n[i]; ++j){ int x; cin >> x; v[i].push_back(x); } } ll ans = n[k]; vector <ll> a(n[k]+1, 1); for(int i = k; i > 1; --i){ vector <ll> b(n[i-1]+1, 0); for(int j = 1; j <= n[i]; ++j){ if(v[i][j-1] == 0) continue; b[v[i][j-1]] += a[j]; } ll sum = 0; for(int j = 1; j <= n[i-1]; ++j){ b[j] = max(1LL, b[j]); sum += b[j]; } ans = max(ans, sum); a = move(b); } cout << ans << '\n'; } |
English