#include <bits/stdc++.h>
const int MAX_N = 6e5;
std::vector<int> list[MAX_N + 3];
int val[MAX_N + 3];
int day[MAX_N + 3];
bool visited[MAX_N + 3];
int day_sum[MAX_N + 3];
int k, n;
void input() {
int n1, n2, prev;
std::cin >> k >> n1;
n = n1;
for (int i = 1; i <= n1; i++)
day[i] = 1;
for (int j = 2; j <= k; j++) {
std::cin >> n2;
for (int i = n + 1; i <= n + n2; i++) {
std::cin >> prev;
day[i] = j;
if (prev != 0) {
list[n - n1 + prev].push_back(i);
}
}
n1 = n2;
n += n2;
}
for (int i = 1; i <= k; i++)
day_sum[i] = 0;
for (int i = 1; i <= n; i++) {
val[i] = 0;
visited[i] = false;
}
}
void dfs(int v) {
visited[v] = true;
if (list[v].empty())
val[v] = 1;
else {
for (auto u : list[v]) {
dfs(u);
val[v] += val[u];
}
}
}
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(NULL);
input();
for (int i = 1; i <= n; i++)
if (!visited[i])
dfs(i);
for (int i = 1; i <= n; i++)
day_sum[day[i]] += val[i];
int result = 0;
for (int i = 1; i <= k; i++)
result = std::max(result, day_sum[i]);
std::cout << result << "\n";
}
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 | #include <bits/stdc++.h> const int MAX_N = 6e5; std::vector<int> list[MAX_N + 3]; int val[MAX_N + 3]; int day[MAX_N + 3]; bool visited[MAX_N + 3]; int day_sum[MAX_N + 3]; int k, n; void input() { int n1, n2, prev; std::cin >> k >> n1; n = n1; for (int i = 1; i <= n1; i++) day[i] = 1; for (int j = 2; j <= k; j++) { std::cin >> n2; for (int i = n + 1; i <= n + n2; i++) { std::cin >> prev; day[i] = j; if (prev != 0) { list[n - n1 + prev].push_back(i); } } n1 = n2; n += n2; } for (int i = 1; i <= k; i++) day_sum[i] = 0; for (int i = 1; i <= n; i++) { val[i] = 0; visited[i] = false; } } void dfs(int v) { visited[v] = true; if (list[v].empty()) val[v] = 1; else { for (auto u : list[v]) { dfs(u); val[v] += val[u]; } } } int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(NULL); input(); for (int i = 1; i <= n; i++) if (!visited[i]) dfs(i); for (int i = 1; i <= n; i++) day_sum[day[i]] += val[i]; int result = 0; for (int i = 1; i <= k; i++) result = std::max(result, day_sum[i]); std::cout << result << "\n"; } |
English