#include <vector>
#include <iostream>
using namespace std;
struct Node {
int value;
bool visited;
std::vector<Node*> children;
Node() : value(0), visited(false) {}
};
void dfs(Node *node) {
if (node == nullptr || node->visited) return;
node->visited = true;
if (node->children.size() == 0) {
node->value = 1;
return;
} else {
for (Node* child : node->children) {
dfs(child);
}
int sum = 0;
for (Node* child : node->children) {
sum += child->value;
}
node->value = sum;
}
}
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int k, n;
int confs, conf;
cin >> k >> n;
vector<vector<Node*>> conf_days(k);
// Day 1
conf_days[0].reserve(n);
for (int i = 0; i < n; i++) {
conf_days[0].push_back(new Node());
}
// Next days
for (int i = 1; i < k; i++) {
cin >> confs;
conf_days[i].reserve(confs);
for (int j = 0; j < confs; j++) {
cin >> conf;
auto node = new Node();
conf_days[i].push_back(node);
if (conf > 0) {
conf_days[i - 1][conf - 1]->children.push_back(node);
}
}
}
for (int i = 0; i < k; i++) {
for (Node* node : conf_days[i]) {
dfs(node);
}
}
int max_sum = 0;
for (int i = 0; i < k; i++) {
int sum = 0;
for (Node* node : conf_days[i]) {
sum += node->value;
}
if (sum > max_sum) {
max_sum = sum;
}
}
cout << max_sum << 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 78 79 80 81 82 83 84 85 86 | #include <vector> #include <iostream> using namespace std; struct Node { int value; bool visited; std::vector<Node*> children; Node() : value(0), visited(false) {} }; void dfs(Node *node) { if (node == nullptr || node->visited) return; node->visited = true; if (node->children.size() == 0) { node->value = 1; return; } else { for (Node* child : node->children) { dfs(child); } int sum = 0; for (Node* child : node->children) { sum += child->value; } node->value = sum; } } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int k, n; int confs, conf; cin >> k >> n; vector<vector<Node*>> conf_days(k); // Day 1 conf_days[0].reserve(n); for (int i = 0; i < n; i++) { conf_days[0].push_back(new Node()); } // Next days for (int i = 1; i < k; i++) { cin >> confs; conf_days[i].reserve(confs); for (int j = 0; j < confs; j++) { cin >> conf; auto node = new Node(); conf_days[i].push_back(node); if (conf > 0) { conf_days[i - 1][conf - 1]->children.push_back(node); } } } for (int i = 0; i < k; i++) { for (Node* node : conf_days[i]) { dfs(node); } } int max_sum = 0; for (int i = 0; i < k; i++) { int sum = 0; for (Node* node : conf_days[i]) { sum += node->value; } if (sum > max_sum) { max_sum = sum; } } cout << max_sum << endl; return 0; } |
English