Cod sursa(job #1922839)

Utilizator Kln1000Ciobanu Bogdan Kln1000 Data 10 martie 2017 19:11:48
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f ("ciclueuler.in");
ofstream t ("ciclueuler.out");

struct edge{
    int to,index;
};

int elim[500010],n,m;
vector <int> sol,stack;
vector <edge> v[100010];

void euler(int nod){
    while (v[nod].size()){
        edge destination=v[nod].back();
        v[nod].pop_back();
        if (!elim[destination.index]){
            int vec=destination.to;
            elim[destination.index]=true;
            stack.push_back(nod);
            nod=vec;
        }
    }
}

int main()
{
    f>>n>>m;
    for (int x,y,i=0;i<m;++i)
        f>>x>>y,
        v[x].push_back({y,i}),
        v[y].push_back({x,i});
    for (int i=1;i<=n;++i)
        if (v[i].size()&1)
            {t<<-1;return 0;}
    int x=1;
    while (1){
        euler(x);
        if (stack.empty()) break;
        x=stack.back();
        stack.pop_back();
        sol.push_back(x);
    }
    for (auto i:sol)
        t<<i<<" ";
    return 0;
}