Cod sursa(job #2121090)

Utilizator DragosArseneDragos Arsene DragosArsene Data 3 februarie 2018 11:48:31
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;

int main() {
    FILE *fin, *fout;
    int st[500001];
    vector <int> lista[100001];
    int sol[500001];
    int n, m, i, j, steag=-1, fiu, a, b, k, nod;
fin = fopen("eulerian.in", "r");
fout = fopen("eulerian.out", "w");

fscanf(fin,"%d%d", &n, &m);
for(i=1;i<=m;i++){
    fscanf(fin,"%d%d", &a, &b);
    lista[a].push_back(b);
    lista[b].push_back(a);
}
for(i=1;i<=n;i++){
    if(lista[i].size()%2!=0&&lista[i].size()!=0)\
        steag=-1;
}
k=1;
st[1]=1;
j=1;
while(k>0){
    nod=st[k];
    if(lista[nod].size()!=0){
        fiu=lista[nod].back();
        k++;
        st[k]=fiu;lista[nod].pop_back();
        lista[fiu].erase(find(lista[fiu].begin(), lista[fiu].end(), nod));
}
else{
    sol[++j]=st[k];
    k--;
}
}
if(steag==-1)
    fprintf(fout,"-1");
else{
for(i=1;i<=j;i++){
    fprintf(fout,"%d", sol[i]);
}
}
fclose(fin);
fclose(fout);

    return 0;
}