Cod sursa(job #1908196)

Utilizator leeviiTempfli Levente2 leevii Data 6 martie 2017 23:29:54
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <set>

using namespace std;

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

struct adat
{
    multiset<int> mp;
};

void del(int f, int g, vector<adat>& x)
{
    auto it=x[f].mp.find(g);
    x[f].mp.erase(it);
    it=x[g].mp.find(f);
    x[g].mp.erase(it);
}

int main()
{
    int n,m;
    fin>>n>>m;
    vector<adat> x(n+1);
    int f,g,i;
    for(i=1;i<=m;i++)
    {
        fin>>f>>g;
        x[f].mp.insert(g);
        x[g].mp.insert(f);
    }

    for(i=1;i<=n;i++)
    {
        if(x[i].mp.size()%2!=0)
        {
            fout<<-1;
            return 0;
        }
    }

    vector<int> a;

    a.push_back(1);
    int akt,akti=0;

    while(akti>-1)
    {
        akt=a[akti];
        if(x[akt].mp.size()==0)
        {
            akti--;
        }
        else
        {
            a.insert(a.begin()+akti+1,*x[akt].mp.begin());
            del(akt,*x[akt].mp.begin(),x);
            akti++;
        }
    }

    for(i=0;i<a.size()-1;i++)
    {
        fout<<a[i]<<" ";
    }

}