Cod sursa(job #3215724)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 15 martie 2024 12:12:14
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;

#define all(x) x.begin(),x.end()
#define pb push_back
using i64=long long;
main()
{
    ifstream cin("ciclueuler.in");
    ofstream cout("ciclueuler.out");
    int n,m;
    cin>>n>>m;
    vector<vector<int>>g(n);

    vector<bool>viz(m,false);
    vector<int>xorr(m);
    for(int i=0;i<m;i++)
    {
        int x,y;
        cin>>x>>y;
        x--;
        y--;
        g[x].pb(i);
        g[y].pb(i);
        xorr[i]=x^y;
    }
    for(int i=0;i<n;i++)
    {
        if(g[i].size()&1)
        {
            cout<<-1;
            return 0;
        }
    }
    stack<int>sk;
    sk.push(0);

    vector<int>rez;
    while(sk.size())
    {
        int acm=sk.top();
        while(g[acm].size() && viz[g[acm].back()])
        {
            g[acm].pop_back();
        }

        if(g[acm].size())
        {
            int edge=g[acm].back();
            viz[edge]=true;
            int next = xorr[edge]^acm;
            sk.push(next);
        }
        else
        {
            rez.pb(acm);
            sk.pop();
        }
    }
    rez.pop_back();
    for(auto &c:rez)
    {
        cout<<c+1<<' ';
    }
}