Nu aveti permisiuni pentru a descarca fisierul grader_test8.in
Cod sursa(job #3337989)
| Utilizator | Data | 31 ianuarie 2026 09:38:24 | |
|---|---|---|---|
| Problema | Ciclu Eulerian | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.27 kb |
#include<iostream>
#include<vector>
#include<unordered_set>
#include<bitset>
using namespace std;
#define NMAX 100001
int n,m;
unordered_set<int>g[NMAX];
bitset<NMAX>b;
auto check_dfs(int i)->void{
b[i]=true;
if(g[i].size()%2){
// nu poate fi ciclu euleria pt ca nodul i are nr de vecini impar
cout<<-1;
exit(0);
}
for(auto it:g[i]){
if(b[it])continue;
check_dfs(it);
}
}
vector<int>sol;
auto euler(int i)->void{
while(g[i].size()){
int it=*g[i].begin();
g[i].erase(g[i].begin());
auto rm=g[it].find(i);
g[it].erase(rm);
euler(it);
}
sol.push_back(i);
}
auto main(void)->signed{
#ifndef LOCAL
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#endif
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;++i){
int x,y;
cin>>x>>y;
g[x].insert(y);
g[y].insert(x);
}
// daca fiecare nod din graf are un nr par de vecini acela e ciclu eulerian
// altfel nu e
check_dfs(1);
euler(1);
if(sol.size()>1)sol.pop_back();
for(auto it:sol)cout<<it<<" ";
return 0;
}
