My Code:
#include<bits/stdc++.h>
using namespace std;
const int N=10001;
queue<int>qu;
int n,m,tot,t;
int a[N],head[N],ver[20*N],nex[20*N],rd[N];
bool vis[5*N];
void add(int x,int y)
{ nex[++tot]=head[x];
ver[tot]=y;
head[x]=tot;
}
void tpsort()
{ while(!qu.empty())
{ t++;
int x=qu.front();
qu.pop();
for(int i=head[x];i;i=nex[i])
{ int y=ver[i];
rd[y]--;
if(vis[y])
{ if(!rd[y])
{ qu.push(y);
}
}
}
}
if(t==n)
{ cout<<"YES"<<endl;
}
else
{ cout<<n-t<<endl;
}
}
int main()
{ cin>>n;
memset(vis,0,sizeof(vis));
memset(rd,0,sizeof(rd));
for(int i=1;i<=n;i++)
{ int y;
cin>>a[i];
vis[a[i]]=1;
cin>>m;
for(int i=1;i<=m;i++)
{ cin>>y;
//vis[y]=1;
rd[y]++;
add(a[i],y);
}
}
for(int i=1;i<=n;i++)
{ if(!rd[a[i]])
{ qu.push(a[i]);
}
}
tpsort();
}