Cod sursa(job #1914221)

Utilizator dragosmdvMoldovan Dragos dragosmdv Data 8 martie 2017 15:58:58
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> v[100010];
int n,freq[100010], m, grad[100010], a,aux,x, b;
stack <int> q;

void dfs(int nod)
{
    freq[nod]=1;
    for(int i=0; i<v[nod].size(); i++)
        if(freq[v[nod][i]]==0)
            dfs(v[nod][i]);

}

bool conex()
{
    int nr=0;
    for(int i=1; i<=n; i++)
        if(freq[i]!=1)
        {
            dfs(i);
            nr++;
        }
    if(nr==1)
        return true;
    else
        return false;

}

bool gradpar()
{
    for(int i=1; i<=n; i++)
        if(grad[i]%2!=0)
            return false;
    return true;
}



int main()
{
    fin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        fin>>a>>b;
        v[a].push_back(b);
        grad[a]++;
        v[b].push_back(a);
        grad[b]++;
    }
    if(conex()&& gradpar())
    {
        q.push(1);
        while(!q.empty())
        {
            aux=q.top();
            if(v[aux].size())
            {
                x=v[aux].back();
                v[aux].pop_back();
                v[x].erase(find(v[x].begin(),v[x].end(),aux));
                q.push(x);
            }
            else
            {
                q.pop();
                if(!q.empty())fout<<aux<<" ";
            }

        }


    }
    else
        fout<<-1;
    return 0;
}