Cod sursa(job #2377054)

Utilizator moltComan Calin molt Data 8 martie 2019 21:16:16
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
using namespace std;

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

struct euler
{
    int y, muchie;
};
int n,m;
vector<euler> v[100005];
stack<int> s;
bool used[500005];
vector<int> sol;

int main()
{
    in>>n>>m;
    for (int i = 1; i <= m; ++i)
    {
        int x,y;
        in>>x>>y;
        v[x].push_back({y,i});
        v[y].push_back({x,i});
    }

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

    s.push(1);
    while (!s.empty())
    {
        int nod = s.top();
        if (!v[nod].empty())
        {
            int vecin = v[nod].back().y, muc = v[nod].back().muchie;
            v[nod].pop_back();
            if (!used[muc])
            {
                used[muc] = true;
                s.push(vecin);
            }
        }
        else
        {
            sol.push_back(nod);
            s.pop();
        }
    }
    for (int i = 0; i < sol.size() - 1; ++i)
        out<<sol[i]<<" ";
    return 0;
}