Cod sursa(job #2331821)

Utilizator mirceaisherebina mircea mirceaishere Data 29 ianuarie 2019 22:48:19
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

int n, m, i, j, x, y, vecin, nod, k, s[500100], d[100100], f[500100];
vector< pair<int,int> >a[100100];

int main(){
    fin>>n>>m;
    for(i=1; i<=m; i++){
        fin>>x>>y;
        a[x].push_back(make_pair(y, i));
        a[y].push_back(make_pair(x, i));
        d[x]++;
        d[y]++;
    }
    for(i=1; i<=n; i++){
        if(d[i]%2==1){
            fout<<-1;
            return 0;
        }
    }
    k=1;
    s[1]=1;
    while(k!=0){
        nod=s[k];
        if(d[nod]==0){
            if(k>1){
                fout<<nod<<" ";

            }
            k--;
            continue;
        }else{
            while(f[a[nod].back().second]==1){
                a[nod].pop_back();
            }
            vecin=a[nod].back().first;
            d[nod]--;
            d[vecin]--;
            f[a[nod].back().second]=1;
            a[nod].pop_back();
            k++;
            s[k]=vecin;
        }
    }
}