Cod sursa(job #1970291)

Utilizator alexionpopescuPopescu Ion Alexandru alexionpopescu Data 19 aprilie 2017 09:46:11
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
stack<int> s;
vector<int> a[100005],sol;
int n,m,to[500005],from[500005];
bool v[500005];
int main(){
    int i,h,j,q,w,k;
    fin>>n>>m;
    for(h=1;h<=m;h++){
        fin>>i>>j;
        a[i].push_back(h);
        a[j].push_back(h);
        from[h]=i;
        to[h]=j;
    }
    for(i=1;i<=n;i++)
        if(a[i].size()%2==1){
            fout<<-1;
            return 0;
        }
    s.push(1);
    while(!s.empty()){
        k=s.top();
        if(!a[k].empty()){
            w=a[k].back();
            a[k].pop_back();
            if(!v[w]){
                v[w]=1;
                if(to[w]!=k)
                    q=to[w];
                else
                    q=from[w];
                s.push(q);
            }
            continue;
        }
        sol.push_back(k);
        s.pop();
    }
    for(i=0;i<sol.size()-1;i++)
        fout<<sol[i]<<" ";
    return 0;
}