Cod sursa(job #2209965)

Utilizator robertkarolRobert Szarvas robertkarol Data 5 iunie 2018 11:33:01
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<multiset<int>> G;
vector<int> ciclu;
int i, x, y, n, m;
void cicluEulerian(int nod)
{
    //cout<<nod;
    for(;G[nod].size();)
    {
        auto it = G[nod].begin();
        G[nod].erase(it);
        G[*it].erase(G[*it].find(nod));
        cicluEulerian(*it);
    }
    ciclu.push_back(nod);
}
int main()
{
    fin>>n>>m;
    G.resize(n+1);
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        G[x].insert(y);
        G[y].insert(x);
        //cout<<x<<" "<<y<<" "<<G[x].size()<<"\n";
        //cout<<x<<" "<<y<<" "<<G[y].size()<<"\n";
    }
    for(const auto& it : G)
        if(it.size()%2)
    {
        //cout<<it.size();
        fout<<-1;
        return 0;
    }
    cicluEulerian(1);
    ciclu.pop_back();
    for(const auto& it : ciclu)
        fout<<it<<" ";
    return 0;
}