#include <cstdio>
#include <vector>
using std::vector;
const int M = 501013;
int k;
int n[M];
vector<int> c[M], ww, e;
int main() {
scanf("%d %d", &k, &n[1]);
c[1] = vector<int>(n[1]);
for (int i = 2; i <= k; i++) {
scanf("%d", &n[i]);
c[i].resize(n[i]);
for (int j = 0; j < n[i]; j++) scanf("%d", &c[i][j]);
}
ww = vector<int>(n[k]+1);
for (int i = k; i >= 1; i--) {
e = vector<int>(n[i-1]+1);
for (int j = 0; j < n[i]; j++) {
if (ww[j+1] == 0 && ww[0] > 0) {
ww[j+1] = 1;
ww[0]--;
}
if (ww[j+1] == 0) ww[j+1] = 1;
e[c[i][j]] += ww[j+1];
}
e[0] += ww[0];
ww = e;
}
printf("%d\n", ww[0]);
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 | #include <cstdio> #include <vector> using std::vector; const int M = 501013; int k; int n[M]; vector<int> c[M], ww, e; int main() { scanf("%d %d", &k, &n[1]); c[1] = vector<int>(n[1]); for (int i = 2; i <= k; i++) { scanf("%d", &n[i]); c[i].resize(n[i]); for (int j = 0; j < n[i]; j++) scanf("%d", &c[i][j]); } ww = vector<int>(n[k]+1); for (int i = k; i >= 1; i--) { e = vector<int>(n[i-1]+1); for (int j = 0; j < n[i]; j++) { if (ww[j+1] == 0 && ww[0] > 0) { ww[j+1] = 1; ww[0]--; } if (ww[j+1] == 0) ww[j+1] = 1; e[c[i][j]] += ww[j+1]; } e[0] += ww[0]; ww = e; } printf("%d\n", ww[0]); return 0; } |
English