Cod sursa(job #2350415)

Utilizator DavidLDavid Lauran DavidL Data 21 februarie 2019 12:33:24
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 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;

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

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});
        deg[u]++;
        deg[v]++;
    }

    int nod = 1, distrus = 0;
    while (1)
    {
        viz[nod] = 1;

        rez.push_back(nod);

        int nxt = -1, much;
        for (auto v: G[nod])
        {
            if (!luat[v.second] && deg[v.first] > 1)
                nxt = v.first, much = v.second;
        }
        if (nxt == -1 || distrus >= m - 1)
            break;

        distrus++;
        nod = nxt;
        luat[much] = 1;
    }

    for (int i = 1; i <= n; i++)
        if (!viz[i])
        {
            fo << -1;
            return 0;
        }

    for (auto x: rez)
        fo << x << " ";

    return 0;
}