Cod sursa(job #2573561)

Utilizator DariusDCDarius Capolna DariusDC Data 5 martie 2020 18:08:52
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 100005;
int n, m;
vector <pair <int, int> > g[nmax];
vector <int> sol;
int viz[300005];

inline void dfs(int nod)
{
    while (g[nod].size())
    {
        int vecin = g[nod].back().first;
        int ind = g[nod].back().second;
        g[nod].pop_back();
        if (viz[ind])
            continue;
        viz[ind] = 1;
        dfs(vecin);
    }
    sol.push_back(nod);
}

int main()
{
    fin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int a, b;
        fin >> a >> b;
        g[a].push_back({b, i});
        g[b].push_back({a, i});
    }
    int ok = 1;
    for (int i = 1; i <= n; ++i)
        if (g[i].size() % 2 == 1)
            ok == 0;
    if (!ok)
        return fout << -1, 0;
    dfs(1);
    for (unsigned int i = 0; i <sol.size() - 1; i++)
        fout << sol[i] << " ";
    return 0;
}