#include <bits/stdc++.h>
using namespace std;
struct Node {
int parent = 0;
int value = 0;
};
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int k, n, p, v;
cin >> k;
cin >> n;
vector<vector<Node>> tree(k + 1);
tree[1].resize(n + 1);
tree[1][0].value = n;
for (int i = 2; i <= k; i++) {
cin >> n;
tree[i].resize(n + 1);
tree[i][0].value = n;
for (int j = 1; j <= n; j++) {
cin >> tree[i][j].parent;
}
}
int result = 0;
for (int i = k; i > 0; i--) {
int rowSum = 0;
for (int j = 1; j <= tree[i][0].value; j++) {
if (tree[i][j].value == 0) {
rowSum += 1;
} else {
rowSum += tree[i][j].value;
}
p = tree[i][j].parent;
if (p != 0) {
v = tree[i][j].value;
tree[i - 1][p].value += (v == 0 ? 1 : v);
}
}
result = max(result, rowSum);
}
cout << result << endl;
}
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; struct Node { int parent = 0; int value = 0; }; int main() { cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); int k, n, p, v; cin >> k; cin >> n; vector<vector<Node>> tree(k + 1); tree[1].resize(n + 1); tree[1][0].value = n; for (int i = 2; i <= k; i++) { cin >> n; tree[i].resize(n + 1); tree[i][0].value = n; for (int j = 1; j <= n; j++) { cin >> tree[i][j].parent; } } int result = 0; for (int i = k; i > 0; i--) { int rowSum = 0; for (int j = 1; j <= tree[i][0].value; j++) { if (tree[i][j].value == 0) { rowSum += 1; } else { rowSum += tree[i][j].value; } p = tree[i][j].parent; if (p != 0) { v = tree[i][j].value; tree[i - 1][p].value += (v == 0 ? 1 : v); } } result = max(result, rowSum); } cout << result << endl; } |
English