#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef short int sint;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<sint, sint> pss;
typedef vector<ll> vll;
typedef vector<int> vint;
typedef vector<sint> vsint;
typedef vector<char> vchar;
typedef vector<bool> vbool;
typedef vector<vbool> vvbool;
typedef vector<vll> vvll;
typedef vector<pll> vpll;
typedef vector<pii> vpii;
typedef vector<pss> vpss;
typedef vector<ull> vull;
typedef vector<vint> vvint;
typedef vector<vvint> vvvint;
typedef vector<vchar> vvchar;
typedef vector<vpii> vvpii;
typedef vector<vpll> vvpll;
#define rep(i, m, n) for (int i = (int)(m); i <= (int)(n); ++i)
#define res(i, m, n) for (int i = (int)(m); i >= (int)(n); --i)
#define fi first
#define se second
#define all(x) (x).begin(), (x).end()
#define all1(x) (x).begin()+1, (x).end()
vvint g(500'069);
vint siz;
vint we;
vbool vi;
void dfs(int v)
{
vi[v] = true;
for (int& u: g[v])
{
dfs(u);
siz[v] += siz[u];
}
siz[v] = max(1, siz[v]);
}
int main()
{
cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false);
int k, n;
cin >> k >> n;
int sum = n, sumlst = 0;
we.push_back(n);
siz.resize(n+69+7+2137);
vi.resize(n+69);
rep(i,2,k)
{
cin >> n;
we.push_back(n);
int xd;
rep(i,1,n)
{
cin >> xd;
if (xd != 0)
g[xd+sumlst].push_back(sum+i);
}
sumlst = sum;
sum += n;
}
rep(i,1,sum)
if (!vi[i])
dfs(i);
int mx = 0;
sum = 1;
rep(i, 1, k)
{
int tmp = 0;
rep(j,sum,sum+we[i-1]-1)
{
tmp += siz[j];
// cout << siz[j] << ' ';
}
//cout << '\n';
mx = max(tmp, mx);
sum += we[i-1];
}
cout << mx << '\n';
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 103 104 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef short int sint; typedef long double ld; typedef unsigned long long ull; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef pair<sint, sint> pss; typedef vector<ll> vll; typedef vector<int> vint; typedef vector<sint> vsint; typedef vector<char> vchar; typedef vector<bool> vbool; typedef vector<vbool> vvbool; typedef vector<vll> vvll; typedef vector<pll> vpll; typedef vector<pii> vpii; typedef vector<pss> vpss; typedef vector<ull> vull; typedef vector<vint> vvint; typedef vector<vvint> vvvint; typedef vector<vchar> vvchar; typedef vector<vpii> vvpii; typedef vector<vpll> vvpll; #define rep(i, m, n) for (int i = (int)(m); i <= (int)(n); ++i) #define res(i, m, n) for (int i = (int)(m); i >= (int)(n); --i) #define fi first #define se second #define all(x) (x).begin(), (x).end() #define all1(x) (x).begin()+1, (x).end() vvint g(500'069); vint siz; vint we; vbool vi; void dfs(int v) { vi[v] = true; for (int& u: g[v]) { dfs(u); siz[v] += siz[u]; } siz[v] = max(1, siz[v]); } int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); int k, n; cin >> k >> n; int sum = n, sumlst = 0; we.push_back(n); siz.resize(n+69+7+2137); vi.resize(n+69); rep(i,2,k) { cin >> n; we.push_back(n); int xd; rep(i,1,n) { cin >> xd; if (xd != 0) g[xd+sumlst].push_back(sum+i); } sumlst = sum; sum += n; } rep(i,1,sum) if (!vi[i]) dfs(i); int mx = 0; sum = 1; rep(i, 1, k) { int tmp = 0; rep(j,sum,sum+we[i-1]-1) { tmp += siz[j]; // cout << siz[j] << ' '; } //cout << '\n'; mx = max(tmp, mx); sum += we[i-1]; } cout << mx << '\n'; return 0; } |
English