#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500005;
int parent_id[MAXN];
long long req[MAXN];
int day_start[MAXN];
int day_end[MAXN];
int main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int k, n1;
cin >> k >> n1;
int global_id = 0;
day_start[1] = 1;
day_end[1] = n1;
global_id = n1;
for (int i = 2; i <= k; i++) {
int ni;
cin >> ni;
day_start[i] = global_id + 1;
day_end[i] = global_id + ni;
for (int j = 1; j <= ni; j++) {
int a;
cin >> a;
global_id++;
if (a > 0) parent_id[global_id] = day_start[i - 1] + a - 1;
else parent_id[global_id] = 0;
}
}
long long maxx = 0;
for (int i = k; i >= 1; i--) {
long long curr = 0;
for (int id = day_start[i]; id <= day_end[i]; id++) {
if (req[id] == 0) req[id] = 1;
curr += req[id];
if (parent_id[id] > 0) req[parent_id[id]] += req[id];
}
maxx = max(maxx, curr);
}
cout << maxx << "\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 | #include <bits/stdc++.h> using namespace std; const int MAXN = 500005; int parent_id[MAXN]; long long req[MAXN]; int day_start[MAXN]; int day_end[MAXN]; int main() { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); int k, n1; cin >> k >> n1; int global_id = 0; day_start[1] = 1; day_end[1] = n1; global_id = n1; for (int i = 2; i <= k; i++) { int ni; cin >> ni; day_start[i] = global_id + 1; day_end[i] = global_id + ni; for (int j = 1; j <= ni; j++) { int a; cin >> a; global_id++; if (a > 0) parent_id[global_id] = day_start[i - 1] + a - 1; else parent_id[global_id] = 0; } } long long maxx = 0; for (int i = k; i >= 1; i--) { long long curr = 0; for (int id = day_start[i]; id <= day_end[i]; id++) { if (req[id] == 0) req[id] = 1; curr += req[id]; if (parent_id[id] > 0) req[parent_id[id]] += req[id]; } maxx = max(maxx, curr); } cout << maxx << "\n"; return 0; } |
English