Cod sursa(job #2672901)

Utilizator eugen5092eugen barbulescu eugen5092 Data 15 noiembrie 2020 12:56:14
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
using namespace std;

ifstream ci("ciclueuler.in");
ofstream cou("ciclueuler.out");

int st[500005];
int dr[500005];
vector<int>L[500005];
int sol[500005];
bool vis[500005];
int poz[500005];

int n,m,p;

void citire(){
    ci>>n>>m;
    int a,b;
    for(int i=1;i<=m;i++){
        ci>>a>>b;
        st[i]=a;
        dr[i]=b;
        L[a].push_back(i);
        L[b].push_back(i);
    }
}

bool verif(){
    for(int i=1;i<=n;i++){
        if(L[i].size()%2!=0){
            return 0;
        }
    }
    return 1;
}

void Dfs(int nod){
    int k;
    while(poz[nod]<L[nod].size()){
        k=L[nod][poz[nod]++];
        if(vis[k]==0){
            vis[k]=1;
            Dfs(st[k]+dr[k]-nod);
        }
    }
    sol[++p]=nod;
}

void afis(){
    for(int i=1;i<=p;i++){
        cou<<sol[i]<<" ";
    }
}


int main()
{
    citire();
    if(verif()){
        Dfs(1);
        afis();
    }else{
        cou<<"-1";
    }
    return 0;
}