Cod sursa(job #1913972)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 8 martie 2017 14:55:25
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>

using namespace std;
int n,m;
stack <int> adancime;
vector <int> Sol;
vector <pair<int,int> > G[100002];
int vViz[500002];
void citire()
{
    int aux1,aux2;
    scanf("%d%d",&n,&m);
    for(int i=1; i<=m; i++)
    {
        scanf("%d%d",&aux1,&aux2);
        G[aux1].push_back(make_pair(aux2,i));
        G[aux2].push_back(make_pair(aux1,i));
    }
}
bool euler()
{
    for(int i=1; i<=n; i++)
        if(G[i].size()%2)
            return false;
    return true;
}
void DFS()
{
    int nod;
    adancime.push(1);
    int nrMuchie,fiu;
    while(!adancime.empty())
    {
        nod=adancime.top();
        if(!G[nod].empty())
        {
            nrMuchie=G[nod].back().second;
            fiu=G[nod].back().first;
            G[nod].pop_back();
            if(!vViz[nrMuchie])
            {
                vViz[nrMuchie]=1;
                adancime.push(fiu);
            }
        }
        else
        {
            adancime.pop();
            Sol.push_back(nod);
        }
    }
}
int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    citire();
    if(euler())
    {
        DFS();
        for(int i=0; i<=m-1; i++)
        {
            printf("%d ",Sol[i]);
        }
    }
    else
        printf("-1");
    return 0;
}