Cod sursa(job #2175321)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 16 martie 2018 16:34:42
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int N=100001,M=500001;
pair <int,int> p[M];
vector <int> v[N];
int n,m,r[m],nr;
bool folosit[M];
int celalalt(pair <int,int> e, int x){
    if(e.first==x)
        return e.second;
    return e.first;
}
void euler(int x){
    int y,z;
    for(int i=0;i<v[x].size();i++){
        z=v[x][i];
        if(!folosit[z]){
            y=celalalt(p[z],x);
            folosit[z]=true;
            euler(y);
        }
    }
    r[++nr]=x;
}
void afisare(){
    for(int i=1;i<=n;i++)
    if(v[i].size()%2!=0){
        g<<-1;
        return;
    }
    for(int i=1;i<=m;i++)
    if(!folosit[i]){
        g<<-1;
        return;
    }
    for(int i=1;i<nr;i++)
        g<<r[i]<<' ';
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y;
        f>>x>>y;
        pair <int,int> e=make_pair(x,y);
        p[i]=e;
        v[x].push_back(i);
        v[y].push_back(i);
    }
    euler(1);
    afisare();
    return 0;
}