Cod sursa(job #2121393)

Utilizator andreeagoideaAndreea Goidea andreeagoidea Data 3 februarie 2018 17:21:35
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

vector<int>lista[100001];

int N, M, k=1, j, nod, fiu, i, ok=1;

int st[500001], sol[500001];

int main()
{
    fin>>N>>M;
    for(i=1; i<=M; i++)
    {
        fin>>nod>>fiu;
        lista[nod].push_back(fiu);
        lista[fiu].push_back(nod);
    }
    for(i=1; i<=N && ok; i++)
        if(lista[i].size()%2!=0)
            ok--;
    if(ok==0)
        fout<<"-1";
    else
    {
        st[1]=1;
        while(k>0)
        {
            nod=st[k];
            if(lista[nod].size()!=0)
            {
                fiu=lista[nod].back();
                k++;
                st[k]=fiu;
                lista[nod].pop_back();
                lista[fiu].erase(find(lista[fiu].begin(), lista[fiu].end(), nod));
            }
            else
            {
                j++;
                if(k>1)
                    fout<<st[k]<<" ";
                k--;
            }
        }
    }
    return 0;
}