Cod sursa(job #1132978)

Utilizator asdfinfoasdf asdf asdfinfo Data 4 martie 2014 10:54:47
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <vector>
#include <utility>
#define F first
#define S second
using namespace std;
vector< vector< pair<int, pair<int, int> > > > v;
int ansPos = 0;
int ans[500000];
void f(int x) {
    //cout<<x+1<<'\n';
    for(int i = 0; i < v[x].size(); ++i) {
        if(!v[x][i].S.S) {
            v[x][i].S.S = 1;
            v[v[x][i].F][v[x][i].S.F].S.S = 1;
            f(v[x][i].F);
        }
    }
    ans[ansPos] = x;
    ++ansPos;
}
int main() {
    ios_base::sync_with_stdio(0);
    int n,m;
    cin>>n>>m;
    v.resize(n);
    for(int i = 0; i < m; ++i) {
        int a,b;
        cin>>a>>b;
        --a,--b;
        if(a == b) {
            v[a].push_back(make_pair(b, make_pair(v[b].size()+1, 0)));
            v[b].push_back(make_pair(a, make_pair(v[a].size()-1, 0))); 
        }
        else {
        v[a].push_back(make_pair(b, make_pair(v[b].size(), 0)));
        v[b].push_back(make_pair(a, make_pair(v[a].size()-1, 0))); 
        }
    }
    /*
    for(int i =0; i < n; ++i) {
        for(int j = 0; j < v[i].size(); ++j) {
            cout<<v[i][j].F+1<<' '<<v[i][j].S.F<<'*';
        }
        cout<<'\n';
    }
    */
    for(int i =0 ; i < n; ++i) {
        if(v[i].size()&1) {
            cout<<-1<<'\n';
            return 0;
        }
    }
    f(0);
    for(int i = 0; i < ansPos; ++i) {
        cout<<ans[i]+1<<' ';
    }
    cout<<'\n';
}