#include<bits/stdc++.h>
using namespace std;
#define fastio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
const int maxK = 5e5;
const int maxN = 5e5;
int k, n;
int dp[maxN+5];
vector<int> mee[maxN+5];
vector<int> G[maxN+5];
bool vis[maxN+5];
int cur_ind;
void dfs(int u)
{
vis[u] = true;
for(auto v : G[u]){
if( vis[v] ) continue;
dfs(v);
dp[u] += dp[v];
}
if( G[u].empty() ) dp[u]=1;
return;
}
int main()
{
fastio;
cin >> k >> n;
for(int i = 1; i <= n; i++){
mee[1].push_back(i);
}
for(int i = 2; i <= k; i++){
int x;
cin >> x;
for(int j = 1; j <= x; j++){
int a;
cin >> a;
n++;
int b = n;
mee[i].push_back(b);
if( a == 0 ) continue;
a = mee[i-1][a-1];
G[a].push_back(b);
}
}
for(int i = 1; i <= n; i++){
if( vis[i] ) continue;
dfs(i);
}
int res = 0;
for(int i = 1; i <= n; i++){
int sum = 0;
for(auto j : mee[i]){
sum += dp[j];
}
res = max(res, sum);
}
cout << res << "\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 | #include<bits/stdc++.h> using namespace std; #define fastio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); const int maxK = 5e5; const int maxN = 5e5; int k, n; int dp[maxN+5]; vector<int> mee[maxN+5]; vector<int> G[maxN+5]; bool vis[maxN+5]; int cur_ind; void dfs(int u) { vis[u] = true; for(auto v : G[u]){ if( vis[v] ) continue; dfs(v); dp[u] += dp[v]; } if( G[u].empty() ) dp[u]=1; return; } int main() { fastio; cin >> k >> n; for(int i = 1; i <= n; i++){ mee[1].push_back(i); } for(int i = 2; i <= k; i++){ int x; cin >> x; for(int j = 1; j <= x; j++){ int a; cin >> a; n++; int b = n; mee[i].push_back(b); if( a == 0 ) continue; a = mee[i-1][a-1]; G[a].push_back(b); } } for(int i = 1; i <= n; i++){ if( vis[i] ) continue; dfs(i); } int res = 0; for(int i = 1; i <= n; i++){ int sum = 0; for(auto j : mee[i]){ sum += dp[j]; } res = max(res, sum); } cout << res << "\n"; return 0; } |
English