/*
* Author: KarolB
* Time: 2026-03-23 15:46:28
**/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr int MAXN = 1e6+6;
typedef pair<int, int> pii;
int n = 1;
int par[MAXN];
vector<int> kra[MAXN];
int layer[MAXN];
int row0[MAXN];
int l0[MAXN];
void add(int p, int l){
int i = n++;
if(p != 0){
kra[p].push_back(i);
par[i] = p;
}
layer[i] = l;
}
int pref[MAXN];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int k, n0;
cin >> k >> n0;
row0[1] = 0;
for(int i = 1; i <= n0; i++){
add(0, 1);
}
for(int r = 2; r <= k; r++){
row0[r] = n-1;
int ni;
cin >> ni;
while(ni--){
int p; cin >> p;
add(p + (p>0)*row0[r-1], r);
}
}
n--;
// for(int i = 1; i <= n; i++){
// cerr << i << ' ' << layer[i] << ' ' << row0[layer[i]] << ' ' << par[i] << " : ";
// for(int j : kra[i]) cerr << j << ' ';
// cerr << '\n';
// }
vector<pii> it;
for(int i = 1; i <= n; i++){
if(par[i] == 0) l0[i] = layer[i];
else{
l0[i] = l0[par[i]];
}
if(kra[i].size() == 0)
it.push_back({l0[i], layer[i]});
}
for(auto &[l, r] : it){
pref[l]++;
pref[r+1]--;
// cerr << l << ' ' << r << '\n';
}
int res = 0;
int sum = 0;
for(int i = 1; i <= n; i++){
sum += pref[i];
res = max(res, sum);
}
cout << res << '\n';
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | /* * Author: KarolB * Time: 2026-03-23 15:46:28 **/ #include <bits/stdc++.h> using namespace std; typedef long long ll; constexpr int MAXN = 1e6+6; typedef pair<int, int> pii; int n = 1; int par[MAXN]; vector<int> kra[MAXN]; int layer[MAXN]; int row0[MAXN]; int l0[MAXN]; void add(int p, int l){ int i = n++; if(p != 0){ kra[p].push_back(i); par[i] = p; } layer[i] = l; } int pref[MAXN]; int main() { ios::sync_with_stdio(false); cin.tie(0); int k, n0; cin >> k >> n0; row0[1] = 0; for(int i = 1; i <= n0; i++){ add(0, 1); } for(int r = 2; r <= k; r++){ row0[r] = n-1; int ni; cin >> ni; while(ni--){ int p; cin >> p; add(p + (p>0)*row0[r-1], r); } } n--; // for(int i = 1; i <= n; i++){ // cerr << i << ' ' << layer[i] << ' ' << row0[layer[i]] << ' ' << par[i] << " : "; // for(int j : kra[i]) cerr << j << ' '; // cerr << '\n'; // } vector<pii> it; for(int i = 1; i <= n; i++){ if(par[i] == 0) l0[i] = layer[i]; else{ l0[i] = l0[par[i]]; } if(kra[i].size() == 0) it.push_back({l0[i], layer[i]}); } for(auto &[l, r] : it){ pref[l]++; pref[r+1]--; // cerr << l << ' ' << r << '\n'; } int res = 0; int sum = 0; for(int i = 1; i <= n; i++){ sum += pref[i]; res = max(res, sum); } cout << res << '\n'; return 0; } |
English