#include <cstdio>
#include <vector>
#define MAXN 500000
using namespace std;
vector<int> n;
vector<int> g[MAXN];
vector<int> r[MAXN];
int main() {
int k, n_i, a;
scanf("%d %d", &k, &n_i);
n.push_back(n_i);
for (int i=0; i < k-1; i++) {
scanf("%d", &n_i);
n.push_back(n_i);
for (int j=0; j < n_i; j++) {
scanf("%d", &a);
g[i].push_back(a);
}
}
for (int i=k-1; i >= 0; i--)
for (int j=0; j < n[i]; j++)
if (i==k-1)
r[i].push_back(1);
else
r[i].push_back(0);
for (int i=k-1; i > 0; i--) {
for (int j=0; j < n[i]; j++)
if (r[i][j] == 0)
r[i][j] = 1;
for (int j=0; j < n[i]; j++)
if (g[i-1][j] != 0) {
int p = g[i-1][j]-1;
r[i-1][p] += r[i][j];
}
}
for (int j=0; j < n[0]; j++)
if (r[0][j] == 0)
r[0][j] = 1;
int res = 0;
for (int i=k-1; i >= 0; i--) {
int act = 0;
for (int j=0; j < n[i]; j++)
act += r[i][j];
if (act > res)
res = act;
}
//for (int i=k-1; i >= 0; i--) {
// for (int j=0; j < n[i]; j++)
// printf("%d ", r[i][j]);
// printf("\n");
//}
printf("%d\n", res);
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 | #include <cstdio> #include <vector> #define MAXN 500000 using namespace std; vector<int> n; vector<int> g[MAXN]; vector<int> r[MAXN]; int main() { int k, n_i, a; scanf("%d %d", &k, &n_i); n.push_back(n_i); for (int i=0; i < k-1; i++) { scanf("%d", &n_i); n.push_back(n_i); for (int j=0; j < n_i; j++) { scanf("%d", &a); g[i].push_back(a); } } for (int i=k-1; i >= 0; i--) for (int j=0; j < n[i]; j++) if (i==k-1) r[i].push_back(1); else r[i].push_back(0); for (int i=k-1; i > 0; i--) { for (int j=0; j < n[i]; j++) if (r[i][j] == 0) r[i][j] = 1; for (int j=0; j < n[i]; j++) if (g[i-1][j] != 0) { int p = g[i-1][j]-1; r[i-1][p] += r[i][j]; } } for (int j=0; j < n[0]; j++) if (r[0][j] == 0) r[0][j] = 1; int res = 0; for (int i=k-1; i >= 0; i--) { int act = 0; for (int j=0; j < n[i]; j++) act += r[i][j]; if (act > res) res = act; } //for (int i=k-1; i >= 0; i--) { // for (int j=0; j < n[i]; j++) // printf("%d ", r[i][j]); // printf("\n"); //} printf("%d\n", res); return 0; } |
English