Cod sursa(job #2332127)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 30 ianuarie 2019 13:47:24
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream in ("ciclueuler.in");
ofstream out ("ciclueuler.out");
int sub[100005],n,m,a,b,s,stiva[500005];
bool hz[500005];
vector<pair<int,int> > v[100005];
int main (void) {
    in >> n >> m;
    for (int i = 1; i <= m; i ++) {
        in >> a >> b;
        v[a].push_back (make_pair (b,i));
        v[b].push_back (make_pair (a,i));
        sub[a] ++;
        sub[b] ++;
    }

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

    s = 1;
    stiva[s] = 1;
    while (s > 0) {
        int nod = stiva[s];
        if (sub[nod] == 0) {
            if (s > 1) {
                out << nod <<" ";
            }
            s--;
        }
        else {
            while (hz[v[nod].back().second] == 1) {
                v[nod].pop_back();
            }
            int vecin = v[nod].back().first;
            hz[v[nod].back().second] = 1;
            v[nod].pop_back ();
            stiva[++s] = vecin;
            sub[nod] --;sub[vecin] --;
        }
    }
    return 0;
}