Cod sursa(job #1133296)

Utilizator thewildnathNathan Wildenberg thewildnath Data 4 martie 2014 18:26:35
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#include<vector>
using namespace std;

#define NMAX 100002

int n,m;
vector<int>v[NMAX];
int list[NMAX],nrl,gr[NMAX];
bool viz[NMAX];


void dfs(int nod)
{
    int i;

    gr[i]-=2;
    viz[nod]=1;

    list[++nrl]=nod;

    for(i=0;i<v[nod].size();++i)
    {
        if(gr[v[nod][i]])
            dfs(v[nod][i]);
    }
}


int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    int i,x,y;

    nrl=0;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
        ++gr[x];
        ++gr[y];
    }
    for(i=1;i<=n;++i)
        if(!gr[i])
            viz[i]=1;
    for(i=1;i<=n;++i)
        if(gr[i]&1)
        {
            printf("-1\n");
            return 0;
        }


    for(i=1;i<=n;++i)
    {
        gr[i]+=2;
        dfs(i);
    }

    for(i=1;i<=n;++i)
        if(!viz[i])
        {
            printf("-1\n");
            return 0;
        }

    list[++nrl]=1;
    for(i=1;i<=nrl;++i)
        printf("%d ",list[i]);

    return 0;
}