Cod sursa(job #723599)

Utilizator GrimpowRadu Andrei Grimpow Data 25 martie 2012 17:35:59
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
vector <int> a[500050];
int ver[500050],n,m,poz=0,S[500500];
int z[500500],y[500500],x;
bool viz[500500];

int euler(int nod)
{
    for(vector<int>::iterator it=a[nod].begin();it!=a[nod].end();++it)
    {
        if(!viz[*it])
        {
            viz[*it]=true;
            euler(z[*it]+y[*it]-nod);
        }
    }
    S[poz]=nod;
    poz++;
    return 0;
}


int paritate()
{
    for(int i=1;i<=n;++i)
    if(ver[i]%2==1)
    {
        x=1;
        return 0;
    }
}

int solve()
{
    paritate();
    if( x==1 )
    {
        ofstream g("ciclueuler.out");
        g<<-1;
        return 0;
    }
    euler(1);
}


void write()
{
    ofstream g("ciclueuler.out");
    for(int i=0;i<poz;++i)
    {
        g<<S[i]<<' ';
    }
    g.close();
}


int main()
{
    ifstream f("ciclueuler.in");
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        f>>z[i]>>y[i];
        a[z[i]].push_back(i);
        if(z[i]!=y[i])a[y[i]].push_back(i);
        ver[z[i]]++;
        ver[y[i]]++;
    }
    f.close();
    solve();
    if(x==1)
    return 0;
    write();
}