https://loj.ac/p/10105
昨天学术版没人回qwq,违规紫衫
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 1, maxm = 4e5 + 1;
int t,n,m;
struct edge{
int fr,to,nxt;
}e[maxm] = {};
int cnt_edge = 0, head[maxn] = {};
int in[maxn] = {}, out[maxn] = {};
bool vis[maxm] = {};
int st[maxm] = {}, top = 0;
void dfs(int u){
for(int i = head[u]; i != -1; i = e[i].nxt){
int v = e[i].to;
if(!vis[i]){
vis[i] = true;
if(t == 1)vis[i^1] = true;
dfs(v);
st[++top] = i;
}
}
}
bool judge(){
for(int i = 1; i <= n; ++i){
if(t == 1){
if(in[i] != out[i]) return false;
}else{
if(in[i] % 2 == 1) return false;
}
}
return true;
}
void add_edge(int u, int v){
e[++cnt_edge] = (edge){u,v,head[u]};
head[u] = cnt_edge;
}
void dfs(){
}
int main(){
cin>>t>>n>>m;
for(int i = 1; i <= n; ++i)head[i] = -1;
for(int i = 1; i <= m; ++i){
int u,v;
cin>>u>>v;
if(t == 1){
add_edge(u,v); add_edge(v,u);
}else{
add_edge(u,v);
}
++out[u];
++in[v];
}
if (judge()){
for(int i = 1; i <= n; ++i){
if(head[i] != -1){
dfs(i);
break;
}
}
}else{
cout<<"NO";
return 0;
}
if(top != m){
cout<<"NO";
return 0;
}
cout<<"YES\n";
for(int i = top; i >= 0; --i)cout<<st[i]<<' ';
return 0;
}