#include <bits/stdc++.h>
using namespace std;
using ll = int64_t;
void solve() {
int k, n1;
cin >> k >> n1;
vector<vector<int>> graph(n1);
vector<int> pos(n1);
int offset = 0;
for(int i = 1; i < k; i++) {
int nextOffset = graph.size();
int n;
cin >> n;
for(int j = 0; j < n; j++) {
int v;
cin >> v;
graph.push_back({});
pos.push_back(i);
if(v != 0) {
graph[v - 1 + offset].push_back(graph.size() - 1);
}
}
offset = nextOffset;
}
vector<bool> visited(graph.size());
vector<int> vs(k + 2);
auto dfs = [&] (int i, auto&& dfs) -> int {
visited[i] = true;
if(graph[i].size() == 0) {
vs[pos[i] + 1]++;
return 1;
}
int sum = 0;
for(int nei : graph[i]) {
sum += dfs(nei, dfs);
}
return sum;
};
for(int i = 0; i < graph.size(); i++) {
if(!visited[i]) {
vs[pos[i]] -= dfs(i, dfs);
}
}
int ans = 0;
int got = 0;
for(auto v : vs) {
if(got + v < 0) {
int need = -(v + got);
got += need;
ans += need;
}
got += v;
}
cout << ans;
}
int main() {
// freopen("in", "r", stdin);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
}
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 | #include <bits/stdc++.h> using namespace std; using ll = int64_t; void solve() { int k, n1; cin >> k >> n1; vector<vector<int>> graph(n1); vector<int> pos(n1); int offset = 0; for(int i = 1; i < k; i++) { int nextOffset = graph.size(); int n; cin >> n; for(int j = 0; j < n; j++) { int v; cin >> v; graph.push_back({}); pos.push_back(i); if(v != 0) { graph[v - 1 + offset].push_back(graph.size() - 1); } } offset = nextOffset; } vector<bool> visited(graph.size()); vector<int> vs(k + 2); auto dfs = [&] (int i, auto&& dfs) -> int { visited[i] = true; if(graph[i].size() == 0) { vs[pos[i] + 1]++; return 1; } int sum = 0; for(int nei : graph[i]) { sum += dfs(nei, dfs); } return sum; }; for(int i = 0; i < graph.size(); i++) { if(!visited[i]) { vs[pos[i]] -= dfs(i, dfs); } } int ans = 0; int got = 0; for(auto v : vs) { if(got + v < 0) { int need = -(v + got); got += need; ans += need; } got += v; } cout << ans; } int main() { // freopen("in", "r", stdin); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); } |
English