Cod sursa(job #2979969)

Utilizator Pasca__GabrielPasca Gabriel Pasca__Gabriel Data 16 februarie 2023 09:31:58
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

vector<pair<int,int> > v[100005];

vector<int> a;

int viz[100005];
int n,m,b,t;


int okey(int n)
{
    for(int i=1;i<=n;i++)
        if(v[i].size()%2==1)
            return 0;
    return 1;
}

void aurel(int node)
{
    while(!v[node].empty())
    {
        auto next_node=v[node].back();
        v[node].pop_back();
        if(!viz[next_node.second])
        {
            viz[next_node.second]=1;
            aurel(next_node.first);
        }
    }
    a.push_back(node);
}

int main()
{
    int i;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>b>>t;
        v[t].push_back({b,i});
        v[b].push_back({t,i});
    }
    if(!okey(n))
    {
        g<<-1;
    }
    else
    {
        aurel(1);
        //stergem nodul final
        a.pop_back();
        for(int i=0;i<(int)a.size();i++)
        {
            g<<a[i]<<" ";

        }
    }
    return 0;
}