Cod sursa(job #2955022)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 15 decembrie 2022 22:33:11
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <stack>

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

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

const int NMAX=1e5+5;
const int NMAX1=5e5+5;

vector<int>v[NMAX];
vector<int>total;

stack<int>s;

bool viz[NMAX1];

struct elem{
    int x;
    int y;
}muchii[NMAX1];

int main()
{
    int n,m,i,j,a,b;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b;
        v[a].push_back(i);
        v[b].push_back(i);
        muchii[i].x=a;
        muchii[i].y=b;
    }
    for(i=1;i<=n;i++)
        if(v[i].size()%2==1)
        {
            fout<<"-1"<<"\n";
            exit(0);
        }
    s.push(1);
    while(!s.empty())
    {
        int p=s.top();
        if(!v[p].empty())
        {
            a=v[p].back();
            v[p].pop_back();
            if(!viz[a])
            {
                b=p^muchii[a].x^muchii[a].y;
                viz[a]=true;
                s.push(b);
            }
        }
        else
        {
            total.push_back(p);
            s.pop();
        }
    }
    total.pop_back();
    for(auto i:total)
        fout<<i<<" ";
    return 0;
}