rt,代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int n,m,ans[maxn],in[maxn],out[maxn],cnt;
vector<vector<int> >e(maxn);
void dfs(int x){
for(auto it=e[x].begin();it<e[x].end();it++){
int v=*it;
e[x].erase(it);
dfs(v);
}
ans[++cnt]=x;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
e[u].push_back(v);
in[v]++;out[v]++;
}
int s=0,t=0;
for(int i=1;i<=n;i++){
if(in[i]==out[i]+1){
if(t){
cout<<"No\n";
return 0;
}
else t=i;
}
else if(out[i]==in[i]+1){
if(s){
cout<<"No\n";
return 0;
}
else s=i;
}
else if(in[i]!=out[i]){
cout<<"No\n";
return 0;
}
}
for(int i=1;i<=n;i++){
sort(e[i].begin(),e[i].end());
}
if(!s) s=1;
dfs(s);
if(cnt<m+1){
cout<<"No\n";
return 0;
}
reverse(ans+1,ans+cnt+1);
for(int i=1;i<=cnt;i++){
cout<<ans[i]<<" ";
}
cout<<"\n";
return 0;
}
样例全过,但是 WA 20pts,求调。
我也不知道大年初一有没有人帮我调。