Cod sursa(job #2696705)

Utilizator LuxinMatMatasaru Luxin Gabriel LuxinMat Data 16 ianuarie 2021 13:38:36
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
int n, m, grad[100001], a[100001], b[100001];
bool viz[500001];
vector<int> v[100001], rasp;
void euler(int nod)
{
    while(v[nod].size() > 0)
    {
        int muchie=v[nod].back();
        v[nod].pop_back();
        if(viz[muchie] == false)
        {
            viz[muchie]=true;
            int vecin=(nod ^ a[muchie] ^ b[muchie]);
            euler(vecin);
        }
    }
    rasp.push_back(nod);
}
int main()
{
    int pp;
    cin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        cin>>a[i]>>b[i];
        v[a[i]].push_back(i);
        v[b[i]].push_back(i);
        grad[a[i]]++;
        grad[b[i]]++;
    }
    pp=0;
    for(int i=1; i<=n && pp==0; i++)
    {
        if(grad[i]%2!=0)
            pp=1;
    }
    if(pp==1)
        cout<<-1;
    else
    {
        euler(1);
        for(int i=rasp.size()-1; i>0; i--)
            cout<<rasp[i]<<" ";
    }

    return 0;
}