Cod sursa(job #2654232)

Utilizator razviii237Uzum Razvan razviii237 Data 30 septembrie 2020 09:47:27
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

const int maxn = 1e5+5;

int n, m, i, x, y, rez;
vector<int> nod[maxn];
int fr[maxn];

void euler(int x) {

    if(rez >= m) { return; }
    int i = 0;
    for(auto u : nod[x]) {
        ++i;
        if(u == -1) { continue; }
        nod[x][i-1] = -1;
        int j = 0;
        for(auto v : nod[u]){
            ++j;
            if(x == v) {
                nod[u][j-1] = -1;
                break;
            }
        }
        euler(u);
    }

    if(rez < m)
    { g << x << ' '; ++rez; }
}

int main()
{
    f >> n >> m;
    for(i = 1; i <= m; i ++) {
        f >> x >> y;
        nod[x].push_back(y);
        nod[y].push_back(x);
        fr[x] ++; fr[y] ++;
    }

    for(i = 1; i <= n; i ++) {
        if(fr[i] % 2 == 1) {
            g << -1; return 0;
        }
    }

    euler(1);

    f.close(); g.close();
    return 0;
}