#include<bits/stdc++.h> #define begin Begin #define next Next #define in In #define out Out usingnamespacestd; constint maxn=200000+100; int n,m,e; int begin[maxn],to[maxn*2],next[maxn*2]; int in[maxn],out[maxn]; inlinevoidadd(int x,int y){ to[++e]=y; next[e]=begin[x]; begin[x]=e; } int f[maxn]; inlineintdfs(int x){ if(f[x])return f[x]; int ans=0; if(!out[x] && in[x])ans++; for(int i=begin[x];i;i=next[i]) ans+=dfs(to[i]); f[x]=ans; return ans; } intmain(){ #ifndef ONLINE_JUDGE freopen("a.in","r",stdin); freopen("a.out","w",stdout); #endif scanf("%d%d",&n,&m); int x,y; for(int i=1;i<=m;i++){ scanf("%d%d",&x,&y); add(x,y); in[y]++; out[x]++; } int ans=0; for(int i=1;i<=n;i++) if(!in[i]) ans+=dfs(i); printf("%d\n",ans); return0; }