Cod sursa(job #2196235)

Utilizator DragosArseneDragos Arsene DragosArsene Data 18 aprilie 2018 20:59:05
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    FILE *fin, *fout;
    int n, m, k, i, l, x, y, steag, nod, fiu;
    vector <int> v[100001];
    int st[500001], sol[100001];
fin = fopen("ciclueuler.in", "r");
fout = fopen("ciclueuler.out", "w");

fscanf(fin,"%d%d", &n, &m);

for(i=1;i<=m;i++){
fscanf(fin,"%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
steag=0;
for(i=1;i<=n;i++){
    if(v[i].size()%2==0)
        steag=1;

}
if(steag==0){
k=1;
st[1]=1;
l=0;

while(k>0){
    nod=st[k];
    if(v[nod].size()!=0){
        fiu=v[nod].back();
        st[++k]=fiu;
        v[nod].pop_back();
        v[fiu].erase(find(v[fiu].begin(), v[fiu].end(), nod));
    }
    else{
        sol[++l]=st[k--];
    }
}

for(i=1;i<=l;i++){
    fprintf(fout,"%d", sol[i]);
}
}
else{
    fprintf(fout,"-1");
}
fclose(fin);
fclose(fout);


    return 0;
}