Cod sursa(job #2075073)

Utilizator netfreeAndrei Muntean netfree Data 25 noiembrie 2017 11:16:25
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 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];

vector<int> ans;

void euler(int nod){
    for(auto v : vec[nod]){
        if(muchii.count(normal({nod, v}))){
            muchii.erase(muchii.find(normal({nod, v})));
            euler(v);
        }
    }
    ans.push_back(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";
        }

    euler(1);

    for(int i = 0; i<ans.size()-1; ++i)
        fout << ans[i] << " ";

    return 0;
}