Cod sursa(job #2275770)

Utilizator razviii237Uzum Razvan razviii237 Data 3 noiembrie 2018 16:13:02
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

const int maxn = 1e5+5;

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

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

inline void add(int x, int y) {
    lst[x].push_back(y);
}

void euler(int p) {

    //cout << "BEG: "; for(auto u : lst[2]) { cout << u << ' '; } cout << '\n';

    for(auto u : lst[p])
    {
        if(lst[p].empty() == true) { break; }
        lst[p].erase(lst[p].begin());                             //cout << "THN: "; for(auto u : lst[2]) { cout << u << ' '; } cout << '\n';
        int j = 0;
        for(auto v : lst[u]) {
            ++j;
            if(v == p) {
                lst[u].erase(lst[u].begin() + j - 1);             //cout << "fp: " << *lst[u].begin() << '\n';
                break;
            }
        }
        euler(u);
    }
    if(rez < m)
    {
        g << p << ' ';
        ++rez;
    }

}

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

    for(i = 1; i <= m; i ++) {
        f >> x >> y;
        fr[x] ++; fr[y] ++;
        add(x, y);
        add(y, x);
    }

    for(i = 1; i <= n; i ++) {
        if(fr[i] % 2 == 1) {
            g << -1;
            return 0;
        }
    }
    /*for(auto u : lst[2]) {
        cout << u << ' ';
    }*/

    euler(1);

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