Cod sursa(job #1815911)

Utilizator dragos_vecerdeaVecerdea Dragos dragos_vecerdea Data 25 noiembrie 2016 21:58:03
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <stdio.h>
#include <vector>
using namespace std;
FILE *fin = fopen("ciclueuler.in", "r");
FILE *fout = fopen("ciclueuler.out", "w");
vector <int> muchie[100001];
vector <int> raspuns;
int from[500001];
int to[500001];
int grad[100001];
char vizitat[500001];
vector <int> stiva;
int ok;
int n, m,x,y,nod,muc;
int main()
{
    fscanf(fin, "%d%d", &n, &m);
    for(int i=1; i<=m; i++)
    {
        fscanf(fin , "%d%d", &x ,&y);
        muchie[x].push_back(i);
        muchie[y].push_back(i);
        from[i]=x;
        to[i]=y;
        grad[x]++;
        grad[y]++;
    }
    int ok=1;
    for(int i=1; i<=n;i++)
    {
        if(grad[i]%2==1) ok=0;
    }
    if(ok==0) fprintf(fout, "-1");
    else
    {
        stiva.push_back(1);
        while(!stiva.empty())
        {
            nod = stiva.back();
            if(!muchie[nod].empty())
            {
                muc = muchie[nod].back();
                muchie[nod].pop_back();
                if(vizitat[muc]==0)
                {
                    vizitat[muc]=1;
                    if(nod == from[muc]) stiva.push_back(to[muc]);
                    else stiva.push_back(from[muc]);
                }
            }
            else
            {
                raspuns.push_back(nod);
                stiva.pop_back();
            }

        }
        for(int i=0; i<raspuns.size()-1; i++) fprintf(fout, "%d ", raspuns[i]);
        }

    return 0;
}