#include<iostream>
#include<vector>
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORD(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
const int MAX_K = 500000;
vector<int> A[MAX_K], B[MAX_K];
int res, n, k, a;
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> k >> n;
A[0].clear(); B[0].clear();
REP(j, n) { A[0].push_back(0); B[0].push_back(0); }
FOR(i, 1, k-1) {
A[i].clear(); B[i].clear();
cin >> n;
REP(j, n) {
cin >> a;
A[i].push_back(a);
B[i].push_back(0);
}
}
int res = -1;
FORD(i, k-1, 0) {
n = B[i].size();
a = 0;
REP(j, n) {
if (B[i][j] == 0) {
B[i][j] = 1;
}
if (A[i][j] != 0) {
B[i-1][A[i][j]-1] += B[i][j];
}
a += B[i][j];
}
if (a > res) {
res = a;
}
}
cout << res << endl;
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 | #include<iostream> #include<vector> #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define FORD(i,a,b) for(int i=(a);i>=(b);--i) using namespace std; const int MAX_K = 500000; vector<int> A[MAX_K], B[MAX_K]; int res, n, k, a; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> k >> n; A[0].clear(); B[0].clear(); REP(j, n) { A[0].push_back(0); B[0].push_back(0); } FOR(i, 1, k-1) { A[i].clear(); B[i].clear(); cin >> n; REP(j, n) { cin >> a; A[i].push_back(a); B[i].push_back(0); } } int res = -1; FORD(i, k-1, 0) { n = B[i].size(); a = 0; REP(j, n) { if (B[i][j] == 0) { B[i][j] = 1; } if (A[i][j] != 0) { B[i-1][A[i][j]-1] += B[i][j]; } a += B[i][j]; } if (a > res) { res = a; } } cout << res << endl; return 0; } |
English