Cod sursa(job #2075084)

Utilizator netfreeAndrei Muntean netfree Data 25 noiembrie 2017 11:19:07
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define pp pair<int,int>
#define x first
#define y second

using namespace std;

ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");

const int N_MAX = 100000 + 5;

int n, m;

pp normal(pp a){
    return{min(a.x, a.y), max (a.x, a.y)};
}

multiset<pp> muchii;
vector<int> vec[N_MAX];

void euler(int nod){
    for(auto v : vec[nod]){
        if(muchii.count(normal({nod, v}))){
            muchii.erase(muchii.find(normal({nod, v})));
            euler(v);
        }
    }
    if(nod != 1)
        fout << nod << " ";
}

int main()
{
    fin >> n >> m;

    while(m--){
        int a, b; fin >> a >> b;
        vec[a].push_back(b);
        vec[b].push_back(a);
        muchii.insert(normal({a,b}));
    }

    for(int i = 1; i<=n; ++i)
        if(vec[i].size() %2 != 0){
            fout << "-1";
        }

    fout << 1 << " ";

    euler(1);

    return 0;
}