https://atcoder.jp/contests/abc245/submissions/me
无向图,如果从这个点出发能一直走下去则为好点,输出图中这种点的个数
倒着拓扑排序,不断更新出度,删除出度为0的点,剩下的全是好点
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+7;
vector<int> g[maxn];
int deg[maxn];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
{
int u,v;
cin>>u>>v;
deg[u]++;
g[v].push_back(u);
}
queue<int> q;
for(int i=1;i<=n;i++)
{
if(deg[i]==0)
q.push(i);
}
int ans=n;
while(!q.empty())
{
int te=q.front();
q.pop();
ans--;
for(int j=0;j<g[te].size();j++)
{ --deg[g[te][j]];
if(deg[g[te][j]]==0)
q.push(g[te][j]);
}
}
cout<<ans;
}