Cod sursa(job #2973271)

Utilizator RobertlelRobert Robertlel Data 31 ianuarie 2023 17:33:48
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;

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

vector  < pair < int , int > > v[100005];
vector <int> sol;
stack <int>s;

int i , n , m , nod , x , y , viz[100005];

int main()
{
    f >> n >> m;
    for (int i = 1 ; i <= m ; i++)
    {
        f >> x >> y;
        v[x].push_back (make_pair (y , i));
        v[y].push_back (make_pair (x , i));
    }
    for (int i = 1 ; i <= n ; i++)
        if (v[i].size () % 2 == 1)
      {
          g << -1 ;
           return 0;
      }
    s.push (1);
    while (!s.empty ())
    {
        int nod = s.top ();
        if (v[nod].size () > 0)
        {
            int u  = v[nod].back().first;
            int ind = v[nod].back().second;
            v[nod].pop_back ();
            if (!viz[ind])
            {
                viz[ind] = 1;
                s.push (u);
            }
        }
        else
        {
            sol.push_back (nod);
            s.pop ();
        }
    }
    sol.pop_back ();
    for (auto vecin : sol)
        g << vecin << " ";
    return 0;
}