Cod sursa(job #1823662)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 6 decembrie 2016 18:36:28
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

int n, m, x, y,grad[100001];
vector <int> g[500005];
vector <int> vSol;

void citire()
{
    scanf("%d%d", &n, &m);
    for(int i=1; i<=m; ++i)
    {
        scanf("%d%d", &x, &y);
        g[x].push_back(y);
        g[y].push_back(x);
        grad[x]++;
        grad[y]++;
    }
}
bool gradPar()
{
    for(int i=1; i<=n; i++)
        if(grad[i]%2) return false;
    return true;
}

void afisare()
{
    vector <int>::iterator it;
    for(it=vSol.begin(); it!=vSol.end()-1; ++it)
        printf("%d ", *it);
}

void eraseMuchie(int nod1, int nod2)
{
    vector <int>::iterator it;
    it=g[nod1].begin();
    g[nod2].pop_back();
    while(*it!=nod2)
        it++;
    g[nod1].erase(it);
}

void rezolvare(int nod)
{
    while(!g[nod].empty())
    {
        int x=g[nod].back();
        eraseMuchie(x, nod);
        rezolvare(x);
    }
    vSol.push_back(nod);
}

int main()
{
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    citire();
    if(gradPar())
    {
        rezolvare(1);
        afisare();
    }
    else
        printf("-1");
    return 0;
}