Cod sursa(job #2349998)

Utilizator DavidLDavid Lauran DavidL Data 20 februarie 2019 22:10:12
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");

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

int n, m;
vector < pair<int, int> > G[NMAX];
bool ok[MMAX];
bool viz[NMAX];
int deg[NMAX];

void dfsCheck(int nod)
{
    viz[nod] = 1;
    for (auto v: G[nod])
        if (!viz[v.first])
            dfsCheck(v.first);
}

void dfs(int &nod)
{
    for (auto v: G[nod])
    {
        if (ok[v.second])
        {
            ok[v.second] = 0;
            dfs(v.first);
        }
    }
    fo << nod << " ";
}

int main()
{
    fi >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int u, v;
        fi >> u >> v;
        G[u].push_back({v, i});
        G[v].push_back({u, i});
        ok[i] = 1;
        deg[u]++;
        deg[v]++;
    }

    bool euler = 1;
    for (int i = 1; i <= n; i++)
        if (deg[i] % 2 == 1)
            euler = 0;

    dfsCheck(1);
    for (int i = 1; i <= n; i++)
        if (!viz[i])
            euler = 0;

    if (!euler)
    {
        fo << -1;
        return 0;
    }

    int val = 1;
    dfs(val);


    return 0;
}