#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graph = vector<vector<int>>(600001, vector<int>());
vector<int> needed = vector<int>(600001, 0);
void dfs(int node) {
if (graph[node].size() == 0) {
needed[node] = 1;
return;
}
int ans = 0;
for (auto son : graph[node]) {
dfs(son);
ans += needed[son];
}
needed[node] = ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int k, n;
cin >> k >> n;
vector<vector<int>> days = vector<vector<int>>(k, vector<int>());
int cnt = 1;
for (int i = 0; i < n; i++) {
days[0].push_back(cnt);
cnt++;
}
for (int i = 1; i < k; i++) {
int d;
cin >> d;
for (int j = 0; j < d; j++) {
int x;
cin >> x;
if (x != 0) {
int parent = days[i - 1][x - 1];
graph[parent].push_back(cnt);
}
days[i].push_back(cnt);
cnt++;
}
}
int ans = 0;
for (int i = 0; i < k; i++) {
int req = 0;
for (int j = 0; j < days[i].size(); j++) {
int node = days[i][j];
if (needed[node] == 0) {
dfs(node);
}
req += needed[node];
}
ans = max(ans, req);
}
cout << ans;
}
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 | #include <bits/stdc++.h> using namespace std; vector<vector<int>> graph = vector<vector<int>>(600001, vector<int>()); vector<int> needed = vector<int>(600001, 0); void dfs(int node) { if (graph[node].size() == 0) { needed[node] = 1; return; } int ans = 0; for (auto son : graph[node]) { dfs(son); ans += needed[son]; } needed[node] = ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int k, n; cin >> k >> n; vector<vector<int>> days = vector<vector<int>>(k, vector<int>()); int cnt = 1; for (int i = 0; i < n; i++) { days[0].push_back(cnt); cnt++; } for (int i = 1; i < k; i++) { int d; cin >> d; for (int j = 0; j < d; j++) { int x; cin >> x; if (x != 0) { int parent = days[i - 1][x - 1]; graph[parent].push_back(cnt); } days[i].push_back(cnt); cnt++; } } int ans = 0; for (int i = 0; i < k; i++) { int req = 0; for (int j = 0; j < days[i].size(); j++) { int node = days[i][j]; if (needed[node] == 0) { dfs(node); } req += needed[node]; } ans = max(ans, req); } cout << ans; } |
English