Cod sursa(job #1928045)

Utilizator valentin50517Vozian Valentin valentin50517 Data 15 martie 2017 20:16:41
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
#define maxm 500100
#define maxn 100100
#define pb push_back
using namespace std;

int N,M,St[maxm],X[maxm],Y[maxm],st;
vector<int> V[maxn];
bool B[maxm];
string rs;
void euler(int x){
    St[st=1] = x;
    while(st){
        x = St[st];
        for(int y;!V[x].empty();){
            int i = V[x].back(); V[x].pop_back();
            if(B[i]) continue;
            B[i] = 1;
            y = x ^ X[i] ^ Y[i];
            St[++st] = y;
            x = y;
        }
        rs+=to_string(St[st--]) + " ";
    }
}

int main() {
	ios_base::sync_with_stdio(0);cin.tie(0);
	ifstream cin("ciclueuler.in");
	ofstream cout("ciclueuler.out");
    cin >> N >> M;
    for(int i=1,x,y;i<=M;i++){
        cin >> x >> y;
        V[x].pb(i);
        V[y].pb(i);
        X[i] = x;
        Y[i] = y;
    }
    for(int i = 1;i<=N;i++) if(V[i].size()%2) return cout << -1,0;
    euler(1);
    cout << rs;
}