#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
#include <cassert>
using namespace std;
#define FOR(i, n) for (int i = 0, __n = (n); i < __n; i++)
int main()
{
int k, n1;
scanf("%d%d", &k, &n1);
vector<vector<int> > V(k);
vector<vector<int> > W(k);
W[0].resize(n1);
for(int i = 1; i < k; i++) {
int n;
scanf("%d", &n);
V[i].resize(n);
W[i].resize(n, 0);
FOR(j, n)
scanf("%d", &V[i][j]);
}
int res = 0;
for(int i = k - 1; i >=0 ; i--) {
int loc = 0;
FOR(j, W[i].size()) {
if (W[i][j] == 0) W[i][j] = 1;
loc += W[i][j];
}
res = max(res, loc);
FOR(j, V[i].size()) {
int v = V[i][j];
if(v == 0) continue;
v--;
W[i-1][v] += W[i][j];
}
}
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 | #include <algorithm> #include <iostream> #include <vector> #include <list> #include <cassert> using namespace std; #define FOR(i, n) for (int i = 0, __n = (n); i < __n; i++) int main() { int k, n1; scanf("%d%d", &k, &n1); vector<vector<int> > V(k); vector<vector<int> > W(k); W[0].resize(n1); for(int i = 1; i < k; i++) { int n; scanf("%d", &n); V[i].resize(n); W[i].resize(n, 0); FOR(j, n) scanf("%d", &V[i][j]); } int res = 0; for(int i = k - 1; i >=0 ; i--) { int loc = 0; FOR(j, W[i].size()) { if (W[i][j] == 0) W[i][j] = 1; loc += W[i][j]; } res = max(res, loc); FOR(j, V[i].size()) { int v = V[i][j]; if(v == 0) continue; v--; W[i-1][v] += W[i][j]; } } printf("%d\n", res); return 0; } |
English