#include <cstdio>
#include <cstdlib>
using namespace std;
const int N = 501*1000;
int a[N];
int s[N];
int z[N];
int k;
int main(void){
int n;
scanf("%d", &k);
for (int i = 0; i < k; ++i){
scanf("%d", &n);
a[i + 1] = a[i] + n;
if (i == 0) {
for (int j = a[i]; j < a[i+1]; ++j)
s[j] = -1;
} else {
for (int j = a[i]; j < a[i+1]; ++j){
scanf("%d", s + j);
s[j]--;
if (s[j] >= 0)
s[j] += a[i-1];
}
}
}
int be = 0;
for (int i = k - 1; i >= 0; --i) {
int suma = 0;
for (int j = a[i]; j < a[i+1]; ++j) {
if (z[j] == 0) z[j] = 1;
suma += z[j];
if (i > 0 && s[j] >= 0)
z[s[j]] += z[j];
}
if (suma > be) be = suma;
}
printf("%d\n", be);
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 | #include <cstdio> #include <cstdlib> using namespace std; const int N = 501*1000; int a[N]; int s[N]; int z[N]; int k; int main(void){ int n; scanf("%d", &k); for (int i = 0; i < k; ++i){ scanf("%d", &n); a[i + 1] = a[i] + n; if (i == 0) { for (int j = a[i]; j < a[i+1]; ++j) s[j] = -1; } else { for (int j = a[i]; j < a[i+1]; ++j){ scanf("%d", s + j); s[j]--; if (s[j] >= 0) s[j] += a[i-1]; } } } int be = 0; for (int i = k - 1; i >= 0; --i) { int suma = 0; for (int j = a[i]; j < a[i+1]; ++j) { if (z[j] == 0) z[j] = 1; suma += z[j]; if (i > 0 && s[j] >= 0) z[s[j]] += z[j]; } if (suma > be) be = suma; } printf("%d\n", be); return 0; } |
English