【题目链接】http://www.lydsy.com/JudgeOnline/problem.php?id=4562
【呆马】
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<iostream>
const int N=1e5+1;
using namespace std;
struct st{int to,next;} e[N<<1];
int n,m,cnt,x,y,i,he,ta,ans,b[N],d[N],f[N],fi[N];
void add(int x,int y){e[++cnt].to=y; e[cnt].next=fi[x]; fi[x]=cnt;}
int main()
{
scanf("%d%d\n",&n,&m);
for (;m;m--)
{
scanf("%d%d\n",&x,&y);
add(x,y);
d[y]++;
}
for (i=1;i<=n;i++)
if (!d[i] && fi[i]) f[b[++ta]=i]=1;
for (he=1;he<=ta;he++)
for (i=fi[b[he]];i;i=e[i].next)
{
f[e[i].to]+=f[b[he]];
if (!--d[e[i].to]) b[++ta]=e[i].to;
}
for (i=1;i<=n;i++)
if (!fi[i]) ans+=f[i];
printf("%d",ans);
}