#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> graf(800102);
vector<int> wrac;
int dfs(int v,int dp){
int sum=0;
if(graf[v].size()==0){
sum=1;
wrac[dp]++;
}
for(auto u:graf[v]){
sum+=dfs(u,dp+1);
}return sum;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int k,n;
cin>>k>>n;
vector<int>old;
wrac=vector<int>(k);
int num=0;
vector<pair<int,int>> starts;
for(int i=0;i<n;i++){
starts.push_back({num,0});
old.push_back(num);
num++;
}
for(int i=0;i<k-1;i++){
vector<int> now;
int ni;
cin>>ni;
for(int j=0;j<ni;j++){
int ojc;
cin>>ojc;
now.push_back(num);
if(ojc==0){
starts.push_back({num,i+1});
// cout<<"Nowe: "<<num<<endl;
}else{
graf[old[ojc-1]].push_back(num);
// cout<<"Dodaje: "<<num<<" do: "<<old[ojc-1]<<endl;
}
num++;
}old=now;
}
vector<int> warst(k,0);
for(int i=0;i<starts.size();i++){
int v=starts[i].first;
int wr=starts[i].second;
warst[wr]+=dfs(v,wr);
// cout<<"warstwa: "<<wr<<"suma: "<<warst[wr]<<endl;
}
int raz=0;
int wol=0;
for(int i=0;i<k;i++){
int pot=warst[i];
int wra=wrac[i];
if(pot>wol){
raz+=(pot-wol);
wol+=(pot-wol);
}wol-=pot;
wol+=wra;
}cout<<raz<<endl;
}
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 | #include<bits/stdc++.h> using namespace std; vector<vector<int>> graf(800102); vector<int> wrac; int dfs(int v,int dp){ int sum=0; if(graf[v].size()==0){ sum=1; wrac[dp]++; } for(auto u:graf[v]){ sum+=dfs(u,dp+1); }return sum; } int main(){ ios::sync_with_stdio(0); cin.tie(0); int k,n; cin>>k>>n; vector<int>old; wrac=vector<int>(k); int num=0; vector<pair<int,int>> starts; for(int i=0;i<n;i++){ starts.push_back({num,0}); old.push_back(num); num++; } for(int i=0;i<k-1;i++){ vector<int> now; int ni; cin>>ni; for(int j=0;j<ni;j++){ int ojc; cin>>ojc; now.push_back(num); if(ojc==0){ starts.push_back({num,i+1}); // cout<<"Nowe: "<<num<<endl; }else{ graf[old[ojc-1]].push_back(num); // cout<<"Dodaje: "<<num<<" do: "<<old[ojc-1]<<endl; } num++; }old=now; } vector<int> warst(k,0); for(int i=0;i<starts.size();i++){ int v=starts[i].first; int wr=starts[i].second; warst[wr]+=dfs(v,wr); // cout<<"warstwa: "<<wr<<"suma: "<<warst[wr]<<endl; } int raz=0; int wol=0; for(int i=0;i<k;i++){ int pot=warst[i]; int wra=wrac[i]; if(pot>wol){ raz+=(pot-wol); wol+=(pot-wol); }wol-=pot; wol+=wra; }cout<<raz<<endl; } |
English