Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("ciclueuler.in");
- ofstream fout("ciclueuler.out");
- int main() {
- int N, M;
- fin >> N >> M;
- vector < vector < pair < int , int > > > G(N + 1);
- vector < bool > viz(M);
- for(int i = 0; i < M; ++i) {
- int u, v;
- fin >> u >> v;
- G[u].emplace_back(v, i);
- G[v].emplace_back(u, i);
- }
- for(int i = 1; i <= N; ++i)
- if(G[i].size() & 1) {
- fout << -1;
- return 0;
- }
- vector < int > sol;
- stack < int > S;
- S.emplace(1);
- while(!S.empty()) {
- int node = S.top();
- if(!G[node].empty()) {
- auto next = G[node].back();
- G[node].pop_back();
- if(!viz[next.second]) {
- viz[next.second] = true;
- S.emplace(next.first);
- }
- }
- else {
- S.pop();
- sol.emplace_back(node);
- }
- }
- sol.pop_back();
- for(int node : sol)
- fout << node << ' ';
- }
Advertisement
Add Comment
Please, Sign In to add comment