Cod sursa(job #1132993)

Utilizator asdfinfoasdf asdf asdfinfo Data 4 martie 2014 11:11:36
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <iostream>
#include <vector>
#include <utility>
#include <array>
#define F first
#define S second
using namespace std;
vector< vector< array<int, 3> >  > v;
int ansPos = 0;
int ans[500000];
void f(int x) {
    for(int i = 0; i < v[x].size(); ++i) {
        if(!v[x][i][2]) {
            v[x][i][2] = 1;
            v[v[x][i][0]][v[x][i][1]][2] = 1;
            f(v[x][i][0]);
        }
    }
    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;
        array<int, 3> ar;
        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))); 
            ar[0] = b;
            ar[1] = v[b].size()+1;
            ar[2] = 0;
            v[a].push_back(ar);
            ar[0] = b;
            ar[1] = v[b].size()-1;
            ar[2] = 0;
            v[b].push_back(ar); 
        }
        else {
            ar[0] = b;
            ar[1] = v[b].size();
            ar[2] = 0;
            v[a].push_back(ar);
            ar[0] = b;
            ar[1] = v[b].size()-1;
            ar[2] = 0;
            v[b].push_back(ar); 
        }
    }
    /*
    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';
}