#include <bits/stdc++.h>
using namespace std;
using ind = long long;
using cind = const ind;
#define FOR(i,l,r) for(ind i = (l); i <= (r); i++)
#define FORD(i,l,r) for(ind i = (l); i >= (r); i--)
#define DEBUG_ON false
#define debug if constexpr(DEBUG_ON)
#define err debug cerr
struct s{
vector<ind> next;
ind prev=0;
};
vector<s> v[500'001];
ind change[500'002];
ind dfs(ind layer, ind i){
ind s=0;
for(auto n : v[layer][i].next) s += dfs(layer+1, n);
if(v[layer][i].next.size()==0) {s++; change[layer+1]++;}
return s;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
ind k, n1;
cin >> k >> n1;
FOR(i,0,n1) v[1].push_back({});
FOR(i,2,k){
ind ni;
cin >> ni;
v[i].push_back({});
FOR(j,1,ni){
ind p;
cin >> p;
v[i].push_back({});
v[i].back().prev = p;
v[i-1][p].next.push_back(j);
}
}
FOR(ki,1,k) FOR(i,1,v[ki].size()-1) if(v[ki][i].prev == 0) change[ki] -= dfs(ki,i);
ind w=0;
ind mini=0;
FOR(i,1,k){
w+=change[i];
mini = min(mini, w);
}
cout << -mini << '\n';
}
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 | #include <bits/stdc++.h> using namespace std; using ind = long long; using cind = const ind; #define FOR(i,l,r) for(ind i = (l); i <= (r); i++) #define FORD(i,l,r) for(ind i = (l); i >= (r); i--) #define DEBUG_ON false #define debug if constexpr(DEBUG_ON) #define err debug cerr struct s{ vector<ind> next; ind prev=0; }; vector<s> v[500'001]; ind change[500'002]; ind dfs(ind layer, ind i){ ind s=0; for(auto n : v[layer][i].next) s += dfs(layer+1, n); if(v[layer][i].next.size()==0) {s++; change[layer+1]++;} return s; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ind k, n1; cin >> k >> n1; FOR(i,0,n1) v[1].push_back({}); FOR(i,2,k){ ind ni; cin >> ni; v[i].push_back({}); FOR(j,1,ni){ ind p; cin >> p; v[i].push_back({}); v[i].back().prev = p; v[i-1][p].next.push_back(j); } } FOR(ki,1,k) FOR(i,1,v[ki].size()-1) if(v[ki][i].prev == 0) change[ki] -= dfs(ki,i); ind w=0; ind mini=0; FOR(i,1,k){ w+=change[i]; mini = min(mini, w); } cout << -mini << '\n'; } |
English