欧拉路径

哦兄弟是谁欧拉路径都还不会求。

解说什么的以后再补了。

P7771

#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;
}
posted @ 2025-07-16 19:46  hm2ns  阅读(6)  评论(0)    收藏  举报