谁来帮我看看吖
#include<bits/stdc++.h>
using namespace std;
const int Maxn=1e5+23;
int head[Maxn];
struct edge{
int u,v,next;
}edge[Maxn];
int dfn[Maxn],low[Maxn];
int n,m,color,cnt,tot,idx;
int col[Maxn],sum[Maxn],id[Maxn];
int sta[Maxn],dp[Maxn],top;
int du[Maxn];
void add(int u,int v){
edge[++cnt].v=v;
edge[cnt].u=u;
edge[cnt].next=head[u];
head[u]=cnt;
}
void tarjan(int u){
sta[++top]=u;
dfn[u]=low[u]=++idx;
dp[u]=1;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].v;
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(dp[u]){
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u]){
color++;
col[u]=color;
sum[color]++;
while(sta[top]!=u){
sum[color]++;
col[sta[top]]=color;
dp[sta[top--]]=0;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
add(v,u);
}
for(int i=1;i<=n;i++){
if(!dfn[i])
tarjan(i);
}
int u=0;
for(int i=1;i<=n;i++){
for(int j=head[i];j;j=edge[i].next ){
int u=edge[j].u, v=edge[j].v;
if(col[u]!=col[v]){
du[col[v]]++;
}
}
}
for(int i=1;i<=color;i++){
if(!du[i]){
tot=sum[i];
u++;
}
}
if(u==1)
cout<<tot<<endl;
else
cout<<0;
return 0;
}
谢谢啦,,谢谢啦