Cod sursa(job #2565067)

Utilizator Fatu_SamuelFatu Samuel Fatu_Samuel Data 2 martie 2020 11:56:53
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 100005, mmax = 500005;
int n, m;

struct vec {
    int to, i;
};

stack < vec > l[nmax];
vector < int > v;

bitset < mmax > viz;

int g[nmax];

void Dfs(int nod)
{
    while (!l[nod].empty())
    {
        int i = l[nod].top().i;
        int to = l[nod].top().to;

        l[nod].pop();

        if (!viz[i])
        {
            viz[i] = 1;
            Dfs(to);
        }
    }

    v.push_back(nod);
}

int main()
{
    fin >> n >> m;

    for (int i = 1; i <= m; i++)
    {
        int a, b;

        fin >> a >> b;

        l[a].push({b, i});
        l[b].push({a, i});
    }

    for (int i = 1; i <= n; i++)
    {
        if (l[i].size() % 2)
        {
            fout << -1;
            fin.close();
            fout.close();
            return 0;
        }
    }

    Dfs(1);


    for (int i = 0; i < v.size() - 1; i++)
        fout << v[i] << ' ';

    fin.close();
    fout.close();
    return 0;
}