Cod sursa(job #3195972)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 22 ianuarie 2024 13:01:36
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> G[100002];
vector <int> c;
bitset <100002> viz;
stack <int> st;
void euler(int nod){
    st.push(nod);
    while(!st.empty()){
        int nod = st.top();
        while(!G[nod].empty()){
            auto it = G[nod].end();
            --it;
            int new_nod = *it;
            G[nod].erase(it);
            G[new_nod].erase(lower_bound(G[new_nod].begin(), G[new_nod].end(), nod));
            st.push(new_nod);
            nod = new_nod;
        }
        c.push_back(nod);
        st.pop();
    }
}
void dfs(int nod){
    viz[nod] = 1;
    for(auto x : G[nod]){
        if(!viz[x]) dfs(x);
    }
}
int main()
{
    int n,m,i,u,v;
    fin >> n >> m;
    for(i = 1; i <= m; i++){
        fin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    dfs(1);
    for(i = 1; i <= n; i++){
        if(G[i].size() & 1 || !viz[i]){
            fout << "-1\n";
            return 0;
        }
    }
    for(i = 1; i <= n; i++) sort(G[i].begin(), G[i].end());
    euler(1);
    c.pop_back();
    for(auto x : c) fout << x << " ";
    return 0;
}