WA on #2 #3 #9 #10
请求神犇帮助!!!
#include<bits/stdc++.h>
using namespace std;
const int N=200005;
const int M=200005;
int n,m;
int cnt=1;
int head[N];
struct Node{
int u,v;
}node[N];
struct Edge{
int nxt,to;
}edge[M];
bool vis[M];
int in[N],out[N];
int start=0;
int cnt1,cnt2,cnt3;
int tot=0;
int ans[M];
void add(int u,int v){
edge[cnt].nxt=head[u];
edge[cnt].to=v;
head[u]=cnt++;
}
bool cmp(Node x,Node y){
if(x.u==y.u) return x.v>y.v;
return x.u>y.u;
}
void dfs(int u){
for(int i=head[u];i;i=head[u])
if(!vis[i]){
head[u]=edge[i].nxt;
int v=edge[i].to;
vis[i]=true;
dfs(v);
}
ans[++tot]=u;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
node[i].u=u,node[i].v=v;
in[v]++,out[u]++;
}
sort(node+1,node+m+1,cmp);
for(int i=1;i<=m;i++)
add(node[i].u,node[i].v);
for(int i=1;i<=n;i++){
if(out[i]-in[i]==1){
start=i;
cnt1++;
}
else if(in[i]-out[i]==1) cnt2++;
else if(in[i]!=out[i]) cnt3++;
}
if(cnt1==0&&cnt2==0&&cnt3==0) dfs(start);
else if(cnt1==1&&cnt2==1&&cnt3==0) dfs(start);
else{
cout<<"No";
return 0;
}
for(int i=tot;i>=1;i--)
cout<<ans[i]<<' ';
return 0;
}