Cod sursa(job #2126756)

Utilizator valorosu_300Cristian Gherman valorosu_300 Data 9 februarie 2018 22:21:08
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int N = 100002, M = 500002;
bool viz[M];
vector <pair <int,int>> v[N];
stack <int> st;
bool isEuler(int n){
    for(int i=1;i<=n;i++)
        if(v[i].size() % 2 == 1)
            return false;
    return true;
}
void solve(int n){
    int nod, nbr, ind, sz;
    st.push(1);
    while(!st.empty()){
        nod = st.top();
        sz = v[nod].size();
        if(sz > 0){
            ind = v[nod][sz-1].second;
            nbr = v[nod][sz-1].first;
            v[nod].pop_back();
            if(viz[ind] == false){
                viz[ind] = true;
                st.push(nbr);
            }
        }
        else{
            st.pop();
            if(!st.empty())
                out<<nod<<" ";
        }
    }
}
int main()
{
    int n,m,x,y;
    in>>n>>m;
    for(int i=1;i<=m;i++){
        in>>x>>y;
        v[x].push_back({y,i});
        v[y].push_back({x,i});
    }
    in.close();
    if(isEuler(n) == false)
        out<<"-1\n";
    else
        solve(n);
    out.close();
    return 0;
}