Cod sursa(job #2555655)

Utilizator yo_andrei_2003Murica Andrei yo_andrei_2003 Data 24 februarie 2020 10:54:26
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <cstdio>
#include <iostream>
#include <vector>


using namespace std;
vector <int> v[500002];
int st[500002], sol[500002];
int main()
{
    int n, next, i, l, k=0, a, b, m;
    FILE *fin, *fout;
    fin=fopen("ciclueuler.in" ,"r");
    fout=fopen("ciclueuler.out" ,"w");
    fscanf(fin, "%d%d" ,&n ,&m);
    for (i=0;i<m;i++) {
        fscanf(fin, "%d%d" ,&a ,&b);
        v[a].push_back(b);
        v[b].push_back(a);
    }
    a=0;
    for (i=1;i<=n;i++) {
        if (v[i].size()%2!=0) {
            a=1;
        }
    }
    if (a==0) {
        st[0]=1;
        i=1;
        while (i>0) {
            a=st[i-1];
            //fprintf(fout, "%d :size %d \n" ,a ,v[a].size());
            if (v[a].size()==0) {
                sol[k]=st[i-1];
                i--;
                k++;
            }
            else {
                next=v[a][v[a].size()-1];
                //fprintf(fout, "%d \n" ,next);
                v[a].erase(v[a].end()-1);
                for (l=0;l<v[next].size();l++) {
                    if (v[next][l]==a) {
                        v[next].erase(v[next].begin()+l);
                        break;
                    }
                }
                st[i]=next;
                i++;
            }
        }
        for (i=0;i<k-1;i++) {
            fprintf(fout, "%d " ,sol[i]);
        }
    }
    else {
        fprintf(fout, "-1" );
    }
    return 0;
}