p2712
#include<bits/stdc++.h>
using namespace std;
vector<int>e[200002];
queue<int>q;
int in[200002],ans;
bool v[5000002];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x,m,y;
cin>>x>>m;
v[x]=true;
for(int i=1;i<=m;i++){
cin>>y;
e[x].push_back(y);
in[y]++;
}
}
for(int i=1;i<=n;i++){
if(in[i]==0) q.push(i);
}
while(!q.empty()){
int u=q.front();q.pop();
ans++;//进了队列的就砸;
for(int i=0;i<e[u].size();i++){
in[e[u][i]]--;//u点通往的第i条边的点的入度--
if(in[e[u][i]]==0&&v[e[u][i]]==true) q.push(e[u][i]);//如果为0,把这个点压 进去
}
}
if(ans==n) cout<<"YES"<<endl;
else cout<<n-ans;
return 0;
}
思路就是拓扑排序,入度为0就砸
但是为什么70分