Cod sursa(job #1874458)

Utilizator GeoeyMexicanuBadita George GeoeyMexicanu Data 9 februarie 2017 23:59:19
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#define N 100010

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int from[N],to[N],i,j,n,m,k,t,p,r;
vector<int> stk;
vector<int> ans;
vector<int> vec[N];
bool uzat[N];
int main()
{
    int x,y;
    f>>n>>m;
    for(i=0;i<m;++i)
    {
        f>>x>>y;
        vec[x].push_back(i);
        vec[y].push_back(i);
        from[i]=x;
        to[i]=y;
    }
    for(i=1;i<=n;i++)
    {
        if(vec[i].size()%2!=0)
        {
            g<<"-1"<<"\n";
            return 0;
        }
    }
    stk.push_back(1);
    int nod,vf;
    while(!stk.empty())
    {
        nod=stk.back();
        if(!vec[nod].empty())
        {
            vf=vec[nod].back();
            vec[nod].pop_back();
            if(uzat[vf]==false)
            {
                uzat[vf]=true;
                if(nod==from[vf])
                    stk.push_back(to[vf]);
                else
                    stk.push_back(from[vf]);
            }
        }
        else
        {
            stk.pop_back();
            ans.push_back(nod);
        }
    }
    for(i=0;i<ans.size()-1;i++)
        g<<ans[i]<<' ';
}