#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int k,s=0; cin>>k;
vector<int> b(k);
vector<vector<int> > p(k);
for(int i=0;i<k;i++){
int n; cin>>n,s+=n;
p[i].resize(n,-1);
if(i)for(auto &j:p[i])cin>>j,j--;
if(i<k-1)b[i+1]=b[i]+n;
}
vector<int> fa(s,-1),e(s);
vector<bool> lf(s,true);
for(int i=k-1;~i;i--)
for(int j=0;j<p[i].size();j++)
if(~p[i][j])lf[fa[b[i]+j]=b[i-1]+p[i][j]]=false;
for(int i=k-1;~i;i--)
for(int j=0;j<p[i].size();j++){
if(lf[b[i]+j])e[b[i]+j]=1;
if(~fa[b[i]+j])e[fa[b[i]+j]]+=e[b[i]+j];
}
int c=count(lf.begin(),lf.end(),true),r=0;
for(int i=0;i<k;i++){
for(int j=0;j<p[i].size();j++)
if(fa[b[i]+j]<0)
for(int k=0;k<e[b[i]+j]&&r;k++)
c--,r--;
for(int j=0;j<p[i].size();j++)
if(lf[b[i]+j])r++;
}
cout<<c<<endl;
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 | #include<bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int k,s=0; cin>>k; vector<int> b(k); vector<vector<int> > p(k); for(int i=0;i<k;i++){ int n; cin>>n,s+=n; p[i].resize(n,-1); if(i)for(auto &j:p[i])cin>>j,j--; if(i<k-1)b[i+1]=b[i]+n; } vector<int> fa(s,-1),e(s); vector<bool> lf(s,true); for(int i=k-1;~i;i--) for(int j=0;j<p[i].size();j++) if(~p[i][j])lf[fa[b[i]+j]=b[i-1]+p[i][j]]=false; for(int i=k-1;~i;i--) for(int j=0;j<p[i].size();j++){ if(lf[b[i]+j])e[b[i]+j]=1; if(~fa[b[i]+j])e[fa[b[i]+j]]+=e[b[i]+j]; } int c=count(lf.begin(),lf.end(),true),r=0; for(int i=0;i<k;i++){ for(int j=0;j<p[i].size();j++) if(fa[b[i]+j]<0) for(int k=0;k<e[b[i]+j]&&r;k++) c--,r--; for(int j=0;j<p[i].size();j++) if(lf[b[i]+j])r++; } cout<<c<<endl; return 0; } |
English