Cod sursa(job #1168339)

Utilizator MKLOLDragos Ristache MKLOL Data 8 aprilie 2014 02:36:15
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<algorithm>
#include<vector>
#include<stdio.h>
#define pb push_back
#define mp make_pair
#define fs first
#define sc second
#define Nmax 151010


using namespace std;
vector<int> ret;
vector<pair<int,int> > g[Nmax];
int isD[Nmax*4];
int N,M,k,nrComp;
void df(int x){
    for(int i=0;i<g[x].size();++i){
        if(isD[g[x][i].sc]==0){

            isD[g[x][i].sc]=1;
            df(g[x][i].fs);
        }
    }
    ret.pb(x);
}
int main(){
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d%d",&N,&M);
    for(int i=1;i<=M;++i){
        int x,y;
        scanf("%d%d",&x,&y);
        g[x].pb(mp(y,i));
        g[y].pb(mp(x,i));
    }
    int ok=1;
    for(int i=1;i<=N;++i){
        if(g[i].size() % 2 == 1){
            ok=0;
        }
    }
    df(1);
    if(ret.size() != M+1)
        ok=0;
    if(ok==0){
        printf("-1");
        return 0;
    }
    for(int i=0;i<M-1;++i){
        printf("%d ",ret[i]);
    }
    return 0;
}