Cod sursa(job #2167905)

Utilizator Tataru_AdelinTataru Adelin Tataru_Adelin Data 14 martie 2018 01:26:29
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

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

void DF(int nod,vector<vector<int>>&path,vector<bool>&viz)
{
    viz[nod]=1;
    for(auto vec:path[nod])
    {
        if(!viz[vec])
            DF(vec,path,viz);
    }
}

int main()
{
    int n,m;
    fin>>n>>m;
    vector<vector<int>>path(n+1);
    int x,y;
    for(;m;m--)
    {
        fin>>x>>y;
        path[x].push_back(y);
        path[y].push_back(x);
    }

    for(int i=1;i<=n;i++)
    {
        if(path[i].size()%2!=0)
        {
            fout<<-1<<'\n';
            return 0;
        }
    }

    vector<bool>viz(n+1,false);
    DF(1,path,viz);

    for(int i=1;i<=n;i++)
    {
        if(!viz[i])
        {
            fout<<-1<<'\n';
            return 0;
        }
    }

    stack<int> stk;
    stk.push(1);
    while(!stk.empty())
    {
        x=stk.top();
        if(path[x].size())
        {
            y=path[x].back();
            path[x].pop_back();
            for(unsigned i=0;i<path[y].size();i++)
                if(path[y][i]==x)
                {
                    swap(path[y][i],path[y].back());
                    path[y].pop_back();
                    break;
                }
            stk.push(y);
        }
        else
        {
            fout<<stk.top()<<' ';
            stk.pop();
        }
    }

    return 0;
}