Cod sursa(job #2331292)

Utilizator maria15Maria Dinca maria15 Data 29 ianuarie 2019 14:14:40
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

int n, m, i, a, b, s[500001], nod, vecin, d[100001], f[500001], k;
vector<pair<int, int> > v[100001];

int main(){
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>a>>b;
        v[a].push_back({b, i});
        v[b].push_back({a, i});
        d[a]++, d[b]++;
    }
    for(i=1;i<=n;i++)
        if(d[i] % 2 == 1){
            fout<<-1;
            return 0;
        }
    s[k = 1] = 1;
    while(k){
        nod = s[k];
        if(d[nod] == 0){
            if(k>1)
                fout<<nod<<" ";
            k--;
            continue;
        }
        while(f[v[nod].back().second] == 1)
            v[nod].pop_back();
        vecin = v[nod].back().first;
        f[v[nod].back().second] = 1;
        d[vecin]--, d[nod]--;
        v[nod].pop_back();
        s[++k] = vecin;
    }
    return 0;
}