Cod sursa(job #1891885)

Utilizator BovisioNitica Ionut Bogdan Bovisio Data 24 februarie 2017 13:38:49
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <vector>

using namespace std;

int n,m,k,l;
int u[500001], v[500001]; // nodurile grafului...extremitatile
int viz[500001] , sol[500001];
int pos[100001]; //vectorul de pozitii

vector <int> G[500002];

void Read()
{
    freopen("ciclueuler.in","r",stdin);
    scanf("%i %i",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%i %i",&u[i], &v[i]);
        G[u[i]].push_back(i);
        G[v[i]].push_back(i);
    }
}

void DF(int nod)
{
    while(pos[nod] < G[nod].size())
    {
        l = G[nod][pos[nod]];
        pos[nod]++;
        if(viz[l] == 0)
        {
            viz[l] = 1;
            DF(u[l] + v[l] - nod);
        }
    }
    sol[++k] = nod;
}

int main()
{
    Read();
    for (int i=1; i<=n; i++)
    {
        if (G[i].size()%2 == 1)//Verific daca nr. de grade ale nodului sunt impare
        {
            printf("",-1);
            return 0;
        }
    }
    DF(1);
    freopen("ciclueuler.out","w",stdout);
    for(int i=1;i<k;i++)
    {
        printf("%i ",sol[i]);
    }
    return 0;
}