Cod sursa(job #2502217)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 noiembrie 2019 14:53:50
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m;
vector<vector<int>> a(100001,vector<int>());

struct Muchie{
    int x;
    int y;
} muchii[500001];

bool eliminat[500001];
vector<int> solutie;

void Citire()
{
    int x,y;
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        f>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
        muchii[i] = {x,y};
    }
}

bool Verificare()
{
    for(int i=1;i<=n;++i)
        if(a[i].size() % 2 == 1) return false;
    return true;
}

void Determinare()
{
    vector<int> v;
    v.push_back(1);

    while (!v.empty())
    {
        int nod = v.back();

        if (!a[nod].empty())
        {
            int ind = a[nod].back();
            a[nod].pop_back();

            if (!eliminat[ind])
            {
                eliminat[ind] = 1;

                int to;
                if (muchii[ind].x == nod) to = muchii[ind].y;
                else to = muchii[ind].x;

                v.push_back(to);
            }
        }
        else
        {
            v.pop_back();
            solutie.push_back(nod);
        }
    }
    for(vector<int>::iterator it=solutie.begin();it!=solutie.end();++it)
        g<<*it<<" ";
}

int main()
{
    Citire();
    if(!Verificare())
    {
        g<<-1;
        return 0;
    }
    Determinare();
    return 0;
}