Cod sursa(job #2837955)

Utilizator CelestinNegraru Celestin Celestin Data 22 ianuarie 2022 21:55:03
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define nmax 100000
#define mmax 500000
using namespace std;
ifstream f("ciclueuler.in",ios::in);
ofstream g("ciclueuler.out",ios::out);
vector<int> V[nmax+10],sol;
stack<int> stiva;
int e1[mmax+10],e2[mmax+10],n,m,a,b;
bool viz[mmax+10],pus;
void read()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>a>>b;
        V[a].push_back(i);
        V[b].push_back(i);
        e1[i]=a;
        e2[i]=b;
    }
    f.close();
    return;
}
bool ok()
{
    for(int i=1;i<=n;i++)
      if(V[i].size()%2)
       return false;
    return true;
}
void euler()
{
    stiva.push(1);
    int sursa,vecin;
    while(!stiva.empty())
    {
        sursa=stiva.top();
        if(V[sursa].size())
        {
            int muchie=V[sursa].back();
            V[sursa].pop_back();
            if(!viz[muchie])
            {
                viz[muchie]=true;
            if(e1[muchie]==e2[muchie])
                vecin=e1[muchie];
            else{
                if(e1[muchie]==sursa)
                    vecin=e2[muchie];
                else if(e2[muchie]==sursa)
                    vecin=e1[muchie];
            }
            stiva.push(vecin);
            }
        }
        else{
            sol.push_back(stiva.top());
            stiva.pop();
        }
    }
    for(int i=0;i<sol.size()-1;i++)
        g<<sol[i]<<" ";
    g<<'\n';
}
int main()
{
    read();
    if(ok())
    {
     euler();
    }
    else g<<-1<<'\n';
    return 0;
}