Cod sursa(job #2114027)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 25 ianuarie 2018 13:32:56
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <vector>
#define maxm 500002
#define nmax 100002
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

int muchie[maxm];
int from[maxm];
int to[maxm];
vector <int> graf[nmax];
vector <int> sol;
vector <int> stiva;

int main()
{
    int n,m,x,y;
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        graf[x].push_back(i);
        graf[y].push_back(i);
        from[i]=x;
        to[i]=y;
    }
    int cond=1;
    for(int i=1;i<=n;i++)
        if(graf[i].size()%2)
        {
            cond=0;
            fout<<"-1";
        }
    if(cond)
    {
        stiva.push_back(1);
        while(!stiva.empty())
        {
            int nod=stiva.back();
            if(graf[nod].size())
            {
                int mu=graf[nod].back();
                graf[nod].pop_back();
                if(!muchie[mu])
                {
                    muchie[mu]=1;
                    int nod2=::from[mu]^::to[mu]^nod;
                    stiva.push_back(nod2);
                }
            }
            else
            {
                stiva.pop_back();
                sol.push_back(nod);
            }
        }
        for(int i=0;i<sol.size()-1;i++)
        {
            fout<<sol[i]<<" ";
        }
    }
    return 0;
}