Cod sursa(job #1909425)

Utilizator leeviiTempfli Levente2 leevii Data 7 martie 2017 12:41:52
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <set>

using namespace std;

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

struct adat
{
    list<int> ls;
};

typedef pair<int,int> P;


int main()
{
    int n,m;
    fin>>n>>m;
    vector<adat> x(n+1);
    vector<P> q(m+1);

    int f,g,i;
    for(i=1;i<=m;i++)
    {
        fin>>f>>g;
        x[f].ls.push_back(i);
        x[g].ls.push_back(i);
        q[i].first=f;
        q[i].second=g;
    }

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

    vector<int> a;
    vector<int> l(m+1);

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

    //for(auto &e : x[1].ls) cout<<e;

    while(akti>-1)
    {
        akt=a[akti];
        if(x[akt].ls.size()==0)
        {
            akti--;
        }
        else
        {
            e=x[akt].ls.front();
            x[akt].ls.pop_front();
            if(l[e]==0)
            {
                l[e]=1;
                if(q[e].first==akt) u=q[e].second;
                else u=q[e].first;
                a.insert(a.begin()+akti+1,u);
                akti++;
            }

        }
    }

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

}