Cod sursa(job #907706)

Utilizator Theorytheo .c Theory Data 8 martie 2013 11:15:37
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<vector>
#include<cstdlib>
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

const int Mmax = 500008;
const int Nmax = 100007;

int N; int M; int X[Mmax]; int Y[Mmax];

vector<int> G[Nmax]; bool Visited[Mmax];

void Read(){

    fin >> N >> M;
    for(int i = 1 ; i <= M; ++i){
        fin >> X[i] >> Y[i];

        G[X[i]].push_back(i);
        G[Y[i]].push_back(i);
    }
}

void Euler(int Nod){

    for(int i = 0;  i < G[Nod].size(); ++i)
        if(Visited[G[Nod][i]] == false){
             Visited[G[Nod][i]] = true;

             Euler(X[G[Nod][i]] + Y[G[Nod][i]] - Nod);
                fout << Nod <<" ";
        }

}
int main(){

    Read();
    for(int i = 1; i <= N; ++i)
        if(G[i].size() % 2 ){
            fout << -1; exit(0);
        }

    Euler(1);
        return 0;
}