Cod sursa(job #2551334)

Utilizator Briana_NeaguNeagu Briana Briana_Neagu Data 19 februarie 2020 19:17:55
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

void findCycle(int start, int m, vector < stack < pair <int, int> > > &neigh)
{
    stack <int> stk;
    vector <int> removed(m + 1, 0);
    stk.push(start);
    while (!stk.empty())
    {
        int node = stk.top();
        if (neigh[node].empty())
        {
            stk.pop();
            if (!stk.empty())
                g << node << " ";
        }
        else
        {
            auto edge = neigh[node].top();
            neigh[node].pop();
            int id = edge.first;
            int next = edge.second;
            if (removed[id])
                continue;
            removed[id] = 1;
            stk.push(next);
        }
    }
}

int main()
{
  int n, m;
  f >> n >> m;
  vector < stack < pair <int, int> > > neigh(n + 1);
  for (int i = 1; i <= m; ++ i)
  {
      int u, v;
      f >> u >> v;
      neigh[u].push({i, v});
      neigh[v].push({i, u});
  }
  for (int node = 1; node <= n; ++ node)
      if (neigh[node].size() % 2 == 1)
      {
          g << -1;
          return 0;
      }
  findCycle(1, m, neigh);
}