#include <iostream>
#include <vector>
#define DEBUG 0
int main()
{
int k, n, res;
std::vector<std::vector<int>> root;
std::vector<std::vector<int>> number;
std::cin >> k >> n;
root.resize(k);
number.resize(k);
root[0].resize(n);
number[0].resize(n);
for (int i = 0; i < n; ++i) {
root[0][i] = -1;
number[0][i] = 0;
}
for (int i = 1; i < k; ++i) {
int ni;
std::cin >> ni;
root[i].resize(ni);
number[i].resize(ni);
for (int j = 0; j < ni; ++j) {
std::cin >> root[i][j];
root[i][j]--;
number[i][j] = 0;
}
}
res = 0;
for (int i = k-1; i >= 0; --i) {
int sum = 0;
for (int j = 0; j < root[i].size(); ++j) {
int r = root[i][j];
if (number[i][j] <= 0)
number[i][j] = 1;
sum += number[i][j];
if (r >= 0) {
number[i-1][r] += number[i][j];
}
}
if (res < sum)
res = sum;
}
int sum = 0;
for (int j = 0; j < number[0].size(); ++j)
sum += number[0][j];
if (res < sum)
res = sum;
#if DEBUG
for (int i = 0; i < k; ++i) {
for (int j = 0; j < root[i].size(); ++j) {
std::cout << number[i][j] << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
#endif
std::cout << res << std::endl;
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 | #include <iostream> #include <vector> #define DEBUG 0 int main() { int k, n, res; std::vector<std::vector<int>> root; std::vector<std::vector<int>> number; std::cin >> k >> n; root.resize(k); number.resize(k); root[0].resize(n); number[0].resize(n); for (int i = 0; i < n; ++i) { root[0][i] = -1; number[0][i] = 0; } for (int i = 1; i < k; ++i) { int ni; std::cin >> ni; root[i].resize(ni); number[i].resize(ni); for (int j = 0; j < ni; ++j) { std::cin >> root[i][j]; root[i][j]--; number[i][j] = 0; } } res = 0; for (int i = k-1; i >= 0; --i) { int sum = 0; for (int j = 0; j < root[i].size(); ++j) { int r = root[i][j]; if (number[i][j] <= 0) number[i][j] = 1; sum += number[i][j]; if (r >= 0) { number[i-1][r] += number[i][j]; } } if (res < sum) res = sum; } int sum = 0; for (int j = 0; j < number[0].size(); ++j) sum += number[0][j]; if (res < sum) res = sum; #if DEBUG for (int i = 0; i < k; ++i) { for (int j = 0; j < root[i].size(); ++j) { std::cout << number[i][j] << " "; } std::cout << std::endl; } std::cout << std::endl; #endif std::cout << res << std::endl; return 0; } |
English