dfsTLE了。。。。。。
#include<bits/stdc++.h>
using namespace std;
int dfn[1000086],v[1000086];
int v1[1000086],f[1000086],ne[1000086],h[1000086];
int cntttt,top,cntt,cnttt,low[1000086];
void add(int x,int y,int i){
v1[i]=y;
ne[i]=h[x];
h[x]=i;
}
int n,m,xi;
int qwq[10000086];
bool bpp[1000086],booll[10000086];
int cmp[10000086],ml[1000086];
int fin(){
int ans=0;
for(int i=1;i<=xi;i++){
for(int j=h[cmp[i]];j;j=ne[j])
if(!booll[v1[j]])ans++;;
}
return ans;
}
void dfs(int x)
{
dfn[x]=low[x]=++cntttt;
qwq[++cntt]=x;
v[x]=1;
for(int i=h[x];i;i=ne[i])
{
int vv=v1[i];
if(!dfn[vv])
{
dfs(vv);
low[x]=min(low[x],low[vv]);
}
else
if(v[vv])
{
low[x]=min(low[x],dfn[vv]);
}
}
if(low[x]==dfn[x])
{
cnttt++;
int ui;
do
{
ui=qwq[cntt--];
v[ui]=0;
cmp[++xi]=ui;
booll[ui]=1;
ml[cnttt]++;
}while(x!=ui);
bpp[cnttt]=fin();
xi=0;
memset(booll,0,sizeof(booll));
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
add(x,y,i);
}
for(int i=1;i<=n;i++)
if(!dfn[i])
dfs(i);
int ans=0,anss=0;
for(int i=1;i<=cnttt;i++){
if(!bpp[i])
ans++,anss=i;
}
if(ans==1){
cout<<ml[anss];
}
else
cout<<0;
}