【题解】欧拉回路
一:【题意】
数据强度极高
二:【代码】
#include<bits/stdc++.h>
#define Pair pair<int,int>
#define v first
#define id second
using namespace std;
const int N=1e5+10,M=2*N;
vector<Pair> mp[N];
int otd[N],ind[N],deg[N];
vector<int> st;
int vis[M];
void dfs(int u,int pa){
while(mp[u].size()){
auto e=mp[u].back();mp[u].pop_back();
int v=e.v,id=e.id;
if(vis[abs(id)]) continue;
vis[abs(id)]=1;
dfs(v,id);
}
st.push_back(pa);
}
int main(){
int t;cin>>t;
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;cin>>a>>b;
if(t==1){
mp[a].push_back({b,i});
mp[b].push_back({a,-i});
deg[a]++;
deg[b]++;
}
else{
mp[a].push_back({b,i});
otd[a]++;
ind[b]++;
}
}
for(int i=1;i<=n;i++){
if(t==1){
if(deg[i]&1){
cout<<"NO\n";
return 0;
}
}
else{
if(ind[i]!=otd[i]){
cout<<"NO\n";
return 0;
}
}
}
int S=-1;
for(int i=1;i<=n;i++){
if(mp[i].size()){
S=i;
break;
}
}
if(S!=-1) dfs(S,0);
if(st.size()-1<m){
cout<<"NO\n";
return 0;
}
cout<<"YES\n";
reverse(st.begin(),st.end());
for(auto v:st){
if(v) cout<<v<<" ";
}
return 0;
}

浙公网安备 33010602011771号