Cod sursa(job #2261205)

Utilizator shantih1Alex S Hill shantih1 Data 16 octombrie 2018 07:46:30
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100005
#define MMAX 500005
#define SZ(x) (int)ad[x].size()

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

int n,i,j,m,a,b,nd,mc;
int to[MMAX],from[MMAX];
bool used[MMAX];
vector<int> ad[NMAX],stk;

int main()
{
    fin>>n;
    fin>>m;
    j=m;
    while(m--)
    {
        fin>>a>>b;
        ad[a].push_back(m);
        ad[b].push_back(m);
        from[m]=a;
        to[m]=b;
    }
    for(i=1;i<=n;i++)
        if(SZ(i)&1)
        {
            fout<<"-1\n";
            return 0;
        }
    stk.push_back(1);
    while(!stk.empty())
    {
        i=stk.back();
        if(!ad[i].empty())
        {
            mc=ad[i].back();
            ad[i].pop_back();
            if(!used[mc])
            {
                used[mc]=true;
                nd=from[mc]^to[mc]^i;
                stk.push_back(nd);
            }
        }
        else
        {
            stk.pop_back();
            if(j>0) fout<<i<<" ";
            j--;
        }
    }
    fout<<"\n";
}