Cod sursa(job #3003335)

Utilizator pifaDumitru Andrei Denis pifa Data 15 martie 2023 17:49:08
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;

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

vector <vector <pair <int, int>>> g;

int n, m;

const int N = 1e5 + 5;

int viz[N];

signed main()
{
    in >> n >> m;
    g.resize(n + 1);
    for(int i = 1; i <= m; i++)
    {
        int x, y;
        in >> x >> y;
        g[x].push_back({y, i});
        g[y].push_back({x, i});
    }
    for(int i = 1; i <= n; i++)
    {
        if(g[i].size() % 2 == 1)
        {
            out << -1;
            return 0;
        }
    }
    stack <int> stiva;
    stiva.push(1);
    for(int i = 1; i <= m; i++)
    {
        int nod = stiva.top();
        while(g[nod].size())
        {
            pair <int, int> urm = g[nod].back();
            g[nod].pop_back();
            if(viz[urm.second])
                continue;
            viz[urm.second] = 1;
            nod = urm.first;
            stiva.push(nod);
        }
        out << nod << ' ';
        stiva.pop();
    }
    return 0;
}