欧拉路径
哦兄弟是谁欧拉路径都还不会求。
解说什么的以后再补了。
#define psb push_back
#define mkp make_pair
#define ls p<<1
#define rs (p<<1)+1
#define rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define per(i,a,b) for( int i=(a); i>=(b); --i)
#define rd read()
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read(){
ll x=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return x*f;
}
const int N=1e5+5;
int ind[N],oud[N];
int sub[N];
vector<pair<int,bool> > e[N];
int cur[N];
stack<int> ansl;
bool cmp(int x,int y){return x<y;}
void dfs(int u){
//cerr<<u<<' '<<'\n';
for(int i=cur[u];i<e[u].size();i=cur[u]){
// if(e[u][i].second)continue;
cur[u]=i+1;
// e[u][i].second=1;
int v=e[u][i].first;
dfs(v);
}
ansl.push(u);
return ;
}
int main(){
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;u=rd;v=rd;
e[u].push_back(mkp(v,0));
ind[v]++;oud[u]++;
}
int be=0,ed=0;
for(int i=1;i<=n;i++){
sub[i]=ind[i]-oud[i];
if(abs(sub[i])>=2){
cout<<"No";
return 0;
}
else if(sub[i]==1&&ed!=0){cout<<"NO";return 0;}
else if(sub[i]==1) ed=i;
else if(sub[i]==-1&&be!=0){cout<<"NO";return 0;}
else if(sub[i]==-1)be=i;
sort(e[i].begin(),e[i].end());
}
if(ansl.size()!=n+1){
cout<<"NO";
return 0;
}
cout<<"YES"<<'\n';
dfs(be);
while(ansl.size()){cout<<ansl.top()<<' ';ansl.pop();}
return 0;
}

浙公网安备 33010602011771号