Cod sursa(job #1922800)

Utilizator andrei.sasaAndrei SaSa andrei.sasa Data 10 martie 2017 18:58:28
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector <int> G[100010];
vector <int> stk;
vector <int> ans;

int n,m,from[500010],to[500010];
bool viz[100010];

int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b;
        f>>a>>b;
        G[a].push_back(i);
        G[b].push_back(i);
        from[i]=a;
        to[i]=b;
    }
    f.close();
    for(int i=1;i<=n;i++)
        if(G[i].size()%2!=0)
        {
            g<<-1<<'\n';
            g.close();
            return 0;
        }
    stk.push_back(1);
    while(!stk.empty())
    {
        int nod=stk.back();
        if(!G[nod].empty())
        {
            int vf=G[nod].back();
            G[nod].pop_back();
            if(!viz[vf])
            {
                viz[vf]=1;
                if(from[vf]==nod)
                    stk.push_back(to[vf]);
                else stk.push_back(from[vf]);
            }
        }
        else
        {
            stk.pop_back();
            ans.push_back(nod);
        }
    }
    for(int i=0;i<ans.size()-1;i++)
        g<<ans[i]<<' ';
    g.close();
    return 0;
}