Cod sursa(job #833345)

Utilizator mvcl3Marian Iacob mvcl3 Data 12 decembrie 2012 14:47:04
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<vector>
using namespace std;
const int Mmax = 500500, Nmax = 100100;
ifstream fin("ciclueuler.in"); ofstream fout("ciclueuler.out");
int n, m, nr, x[Mmax], y[Mmax], sol[Mmax];
vector<int> g[Nmax];
bool viz[Mmax];
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] = true;
            euler(x[*it] + y[*it] - nod);
        }
    }
    sol[++nr] = nod;
}
inline int cont()
{
    for(int i = 1; i <= n; ++i)
        if(g[i].size() % 2) return 0;
    return 1;
}
int main()
{
    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);
    }
    if(cont())
    {
        euler(1);
        for(int i = nr; i >= 1; --i) fout<<sol[i]<<' ';
    }
    else
        fout<<-1;
    fout<<'\n';
    fout.close();
    return 0;
}