#include <cstdio>
#include <vector>
using namespace std;
int main() {
int k, n1;
scanf("%d %d", &k, &n1);
vector<vector<int>> a(k + 1);
a[1].resize(n1);
for (int i = 0; i < n1; i++) {
a[1][i] = 0;
}
for (int day = 2; day <= k; day++) {
int n;
scanf("%d", &n);
a[day].resize(n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[day][i]);
}
}
vector<vector<int>> need(k + 1);
for (int day = 1; day <= k; day++) {
need[day].assign(a[day].size(), 1);
}
for (int day = k - 1; day >= 1; day--) {
vector<int> sum(a[day].size(), 0);
for (int i = 0; i < (int)a[day + 1].size(); i++) {
int prev = a[day + 1][i];
if (prev > 0) {
sum[prev - 1] += need[day + 1][i];
}
}
for (int i = 0; i < (int)a[day].size(); i++) {
need[day][i] = sum[i] > 0 ? sum[i] : 1;
}
}
int answer = 0;
for (int x : need[1]) answer += x;
printf("%d", answer);
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 | #include <cstdio> #include <vector> using namespace std; int main() { int k, n1; scanf("%d %d", &k, &n1); vector<vector<int>> a(k + 1); a[1].resize(n1); for (int i = 0; i < n1; i++) { a[1][i] = 0; } for (int day = 2; day <= k; day++) { int n; scanf("%d", &n); a[day].resize(n); for (int i = 0; i < n; i++) { scanf("%d", &a[day][i]); } } vector<vector<int>> need(k + 1); for (int day = 1; day <= k; day++) { need[day].assign(a[day].size(), 1); } for (int day = k - 1; day >= 1; day--) { vector<int> sum(a[day].size(), 0); for (int i = 0; i < (int)a[day + 1].size(); i++) { int prev = a[day + 1][i]; if (prev > 0) { sum[prev - 1] += need[day + 1][i]; } } for (int i = 0; i < (int)a[day].size(); i++) { need[day][i] = sum[i] > 0 ? sum[i] : 1; } } int answer = 0; for (int x : need[1]) answer += x; printf("%d", answer); return 0; } |
English