#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graf;
vector<int> odw;
void dfs(int k, int rodz)
{
int fl = 0;
for(int i=0;i<graf[k].size();i++)
{
if(graf[k][i] != rodz)
{
fl = 1;
dfs(graf[k][i], k);
}
}
odw[k] = 0;
for(int i=0;i<graf[k].size();i++)
{
if(graf[k][i] != rodz)
{
odw[k] += odw[graf[k][i]];
}
}
if(odw[k] == 0)
{
odw[k] = 1;
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int k, n;
cin >> k >> n;
vector<int> eny(k);
eny[0] = n;
graf.resize(n);
odw.resize(n, 0);
int su_n = n, su_n2 = 0, el;
for(int i=1;i<k;i++)
{
cin >> eny[i];
//cout << su_n << ' ' << su_n2 << '\n';
graf.resize(su_n+eny[i]);
odw.resize(su_n+eny[i], 0);
for(int y=0;y<eny[i];y++)
{
cin >> el;
if(el > 0)
{
graf[su_n+y].push_back(su_n2+el-1);
graf[su_n2+el-1].push_back(su_n+y);
}
}
su_n2 = su_n;
su_n += eny[i];
}
/*cout << '\n';
for(int i=0;i<su_n;i++)
{
cout << i << ' ';
for(int y=0;y<graf[i].size();y++)
{
cout << graf[i][y] << ' ';
}
cout << '\n';
}*/
int wyn = 0, ak = 0;
for(int i=0;i<su_n;i++)
{
if(odw[i] == 0)
{
dfs(i, i);
}
}
int ind = 0;
for(int i=0;i<k;i++)
{
ak = 0;
for(int y=0;y<eny[i];y++)
{
ak += odw[ind];
ind += 1;
}
wyn = max(ak, wyn);
}
/*for(int i=0;i<k;i++)
{
cout << eny[i] << ' ';
}
cout << '\n';
for(int i=0;i<su_n;i++)
{
cout << odw[i] << ' ';
}*/
cout << wyn;
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #include <bits/stdc++.h> using namespace std; vector<vector<int>> graf; vector<int> odw; void dfs(int k, int rodz) { int fl = 0; for(int i=0;i<graf[k].size();i++) { if(graf[k][i] != rodz) { fl = 1; dfs(graf[k][i], k); } } odw[k] = 0; for(int i=0;i<graf[k].size();i++) { if(graf[k][i] != rodz) { odw[k] += odw[graf[k][i]]; } } if(odw[k] == 0) { odw[k] = 1; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k, n; cin >> k >> n; vector<int> eny(k); eny[0] = n; graf.resize(n); odw.resize(n, 0); int su_n = n, su_n2 = 0, el; for(int i=1;i<k;i++) { cin >> eny[i]; //cout << su_n << ' ' << su_n2 << '\n'; graf.resize(su_n+eny[i]); odw.resize(su_n+eny[i], 0); for(int y=0;y<eny[i];y++) { cin >> el; if(el > 0) { graf[su_n+y].push_back(su_n2+el-1); graf[su_n2+el-1].push_back(su_n+y); } } su_n2 = su_n; su_n += eny[i]; } /*cout << '\n'; for(int i=0;i<su_n;i++) { cout << i << ' '; for(int y=0;y<graf[i].size();y++) { cout << graf[i][y] << ' '; } cout << '\n'; }*/ int wyn = 0, ak = 0; for(int i=0;i<su_n;i++) { if(odw[i] == 0) { dfs(i, i); } } int ind = 0; for(int i=0;i<k;i++) { ak = 0; for(int y=0;y<eny[i];y++) { ak += odw[ind]; ind += 1; } wyn = max(ak, wyn); } /*for(int i=0;i<k;i++) { cout << eny[i] << ' '; } cout << '\n'; for(int i=0;i<su_n;i++) { cout << odw[i] << ' '; }*/ cout << wyn; return 0; } |
English