Cod sursa(job #1785023)

Utilizator adystar00Bunea Andrei adystar00 Data 20 octombrie 2016 20:00:50
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <pair <int,int> > g[100010];
int k,ok,nr1,vc[500010],sol[500010],n,m;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
void dfs (int nod, int dad)
{
    int a,i,j;
    if(nod==1)
        nr1++;
    if(nr1>=2&&k==m)
    {
        ok=1;
        for(i=1; i<=k; i++)
            fout<<sol[i]<<" ";
        return;
    }
    a=g[nod].size();
    for(j=0; j<a; j++)
    {
        if(vc[g[nod][j].second]==0)
        {
            vc[g[nod][j].second]=1;
            sol[++k]=g[nod][j].first;
            dfs(g[nod][j].first,nod);
        }
    }
    if(dad!=0)
    {
        vc[g[nod][dad].second]=0;
        k--;
    }

}
int main()
{
    int i,a,b;
    fin>>n>>m;
    for(i=1; i<=m; i++)
    {
        fin>>a>>b;
        g[a].push_back(make_pair(b,i));
        g[b].push_back(make_pair(a,i));
    }
    sol[1]=1;
    k=1;
    dfs(1,0);

    if(ok==0)
        fout<<"-1";
    return 0;
}