#include <bits/stdc++.h>
using namespace std;
int dfs(int lev, int ind, vector<vector<vector<int> > > &grs, vector<vector<int> > &res) {
int sum = 0;
for(int i=0; i<grs[lev][ind].size(); i++) {
sum += dfs(lev+1, grs[lev][ind][i], grs, res);
}
res[lev][ind] = sum == 0 ? 1 : sum;
return res[lev][ind];
}
int main() {
int k,n1;
cin>>k>>n1;
vector<vector<int> > inp(k);
vector<vector<vector<int> > > grs(k);
grs[0] = vector<vector<int> > (n1);
vector<vector<int> > res(k);
res[0] = vector<int> (n1, 0);
for(int i=1; i<k; i++) {
int n;
cin>>n;
for(int j=0; j<n; j++) {
int x;
cin>>x;
if(x != 0)
grs[i-1][x-1].push_back(j);
res[i].push_back(0);
}
grs[i] = vector<vector<int> > (n);
}
int number = 0;
for(int i=0; i<k; i++) {
int sum = 0;
for(int j=0; j<grs[i].size(); j++) {
if(res[i][j] == 0) {
dfs(i, j, grs, res);
}
sum += res[i][j];
}
number = max(number, sum);
}
cout<<number;
}
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 | #include <bits/stdc++.h> using namespace std; int dfs(int lev, int ind, vector<vector<vector<int> > > &grs, vector<vector<int> > &res) { int sum = 0; for(int i=0; i<grs[lev][ind].size(); i++) { sum += dfs(lev+1, grs[lev][ind][i], grs, res); } res[lev][ind] = sum == 0 ? 1 : sum; return res[lev][ind]; } int main() { int k,n1; cin>>k>>n1; vector<vector<int> > inp(k); vector<vector<vector<int> > > grs(k); grs[0] = vector<vector<int> > (n1); vector<vector<int> > res(k); res[0] = vector<int> (n1, 0); for(int i=1; i<k; i++) { int n; cin>>n; for(int j=0; j<n; j++) { int x; cin>>x; if(x != 0) grs[i-1][x-1].push_back(j); res[i].push_back(0); } grs[i] = vector<vector<int> > (n); } int number = 0; for(int i=0; i<k; i++) { int sum = 0; for(int j=0; j<grs[i].size(); j++) { if(res[i][j] == 0) { dfs(i, j, grs, res); } sum += res[i][j]; } number = max(number, sum); } cout<<number; } |
English