#include <iostream>
#include <vector>
/*
4 3
3 1 1 1
4 0 0 2 0
2 3 3
2 1
2 0 0
*/
struct node_t
{
std::vector<int> children;
int num_workers_needed = 0;
};
std::vector<std::vector<node_t>> g;
int use_workers(int level, int index)
{
node_t& node = g[level][index];
if (node.num_workers_needed == 0)
{
if (node.children.empty())
++node.num_workers_needed;
else for (int child_index : node.children)
node.num_workers_needed += use_workers(level + 1, child_index);
}
return node.num_workers_needed;
}
int main()
{
int k, n1;
std::cin >> k >> n1;
g.resize(k);
g[0].resize(n1);
for (int i = 1; i < k; ++i)
{
int ni;
std::cin >> ni;
g[i].resize(ni);
for (int j = 0; j < ni; ++j)
{
int parent;
std::cin >> parent;
if (parent)
{
--parent;
g[i-1][parent].children.push_back(j);
}
}
}
int max_workers_needed = 0;
for (int i = 0; i < k; ++i)
{
int num_workers_needed_on_day = 0;
for (int j = 0; j < g[i].size(); ++j)
num_workers_needed_on_day += use_workers(i, j);
if (max_workers_needed < num_workers_needed_on_day)
max_workers_needed = num_workers_needed_on_day;
}
std::cout << max_workers_needed;
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 | #include <iostream> #include <vector> /* 4 3 3 1 1 1 4 0 0 2 0 2 3 3 2 1 2 0 0 */ struct node_t { std::vector<int> children; int num_workers_needed = 0; }; std::vector<std::vector<node_t>> g; int use_workers(int level, int index) { node_t& node = g[level][index]; if (node.num_workers_needed == 0) { if (node.children.empty()) ++node.num_workers_needed; else for (int child_index : node.children) node.num_workers_needed += use_workers(level + 1, child_index); } return node.num_workers_needed; } int main() { int k, n1; std::cin >> k >> n1; g.resize(k); g[0].resize(n1); for (int i = 1; i < k; ++i) { int ni; std::cin >> ni; g[i].resize(ni); for (int j = 0; j < ni; ++j) { int parent; std::cin >> parent; if (parent) { --parent; g[i-1][parent].children.push_back(j); } } } int max_workers_needed = 0; for (int i = 0; i < k; ++i) { int num_workers_needed_on_day = 0; for (int j = 0; j < g[i].size(); ++j) num_workers_needed_on_day += use_workers(i, j); if (max_workers_needed < num_workers_needed_on_day) max_workers_needed = num_workers_needed_on_day; } std::cout << max_workers_needed; return 0; } |
English