AcWing 3225. 送货
原题链接
中等
作者:
20岁带专生陈刀仔
,
2021-05-25 12:12:20
,
所有人可见
,
阅读 352
#include<iostream>
#include<set>
using namespace std;
const int N = 10010;
const int E = 150000;
int n, m;
multiset<int> to[N];
int len[N];
int road[E], k;
void dfs(int x){
for(auto a = to[x].begin(); a != to[x].end(); a = to[x].begin()){
int t = *a;
to[x].erase(a);
to[t].erase(to[t].find(x));
dfs(t);
}
road[++k] = x;
}
int main(){
scanf("%d %d", &n, &m);
int a, b;
for(int i = 1; i <= m; i++){
scanf("%d %d\n", &a, &b);
len[a]++, len[b]++;
to[a].insert(b);
to[b].insert(a);
}
int cnt = 0;
for(int i = 1; i <= n; i++)
if(len[i] % 2)
cnt++;
if(cnt != 0 && cnt != 2 || (cnt == 2 && len[1] % 2 == 0)) printf("-1");
else{
dfs(1);
if(k < n) printf("-1");
else{
for(int i = k; i >= 1; i--)
printf("%d ", road[i]);
}
}
return 0;
}