样例中我的代码输出的是2 3 1 1
,但是交上去后 AC 了,有没有大佬能解释一下。
#include<bits/stdc++.h>
using namespace std;
const int maxn=5010;
int n,m,cnt;
int head[maxn],deg[maxn],a[maxn];
queue<int> que;
struct edge{
int to,nxt,w;
}e[100010];
void init(){
memset(head,-1,sizeof(head));
memset(deg,0,sizeof(deg));
cnt=0;
}
void addedge(int u,int v){
e[cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt++;
}
int main(){
cin>>n>>m;
init();
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
addedge(u,v);
deg[v]++;
}
int sum=0,flag=0;
for(int i=1;i<=n;i++){
if(deg[i]==0){
que.push(i);
sum++;
}
}
if(sum>1){
flag=1;
}
int ccnt=1;
while(!que.empty()){
int u=que.front();
que.pop();
sum=0;
a[ccnt++]=u;
for(int i=head[u];~i;i=e[i].nxt){
int v=e[i].to;
deg[v]--;
if(deg[v]==0){
sum++;
que.push(v);
}
}
if(sum>1){
flag=1;
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<"\n";
}
cout<<flag;
return 0;
}