Cod sursa(job #833553)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 12 decembrie 2012 18:46:27
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
#include<vector>
#define Nmax 100100
#define Mmax 500500
using namespace std;
ifstream in("ciclueuler.in"); ofstream out("ciclueuler.out");
int n,m,x[Mmax],y[Mmax], sol[Nmax],nr;
bool viz[Mmax];
vector <int> g[Nmax];
inline void citire(){ in>>n>>m; for(int i=1;i<=m;++i) { in>>x[i]>>y[i]; g[x[i]].push_back(i);}}
inline bool eulerian(){
    for(int i=1;i<=n;++i)
        if(g[i].size()%2)
            return false;
    return true;
}
inline void euler(int nod){
    vector<int> ::iterator it=g[nod].begin(), sf=g[nod].end();
    for(;it!=sf;++it){
        if(!viz[*it]){
            viz[*it]=1;
            euler(x[*it]+y[*it]-nod);
        }
    }
    sol[++nr]=nod;
}
int main(){ citire(); if(eulerian()){ euler(1); for(int i=1;i<=nr;++i) out<<sol[i]<<' '; out<<'\n';}
    else out<<"-1\n";
    return 0;
}