Cod sursa(job #2384677)

Utilizator serbandonceanSerban Doncean serbandoncean Data 21 martie 2019 08:58:25
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define DMAX 100100
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void citire();
struct ele{int y,muc;};
vector <ele> a[DMAX];
vector<int> sol;
int grad[DMAX];
void euler(int poz);
void dfs(int x);
int prim,n,m;
bool da[DMAX];
bool muchie[500100];
void euler(int poz);
int main()
{int i;
    citire();

    euler(prim);
    for(i=0;i<sol.size()-1;i++)
        fout<<sol[i]<<' ';
}
void citire()
{int i,x,y,j;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        a[x].push_back({y,i});
        a[y].push_back({x,i});

    }
    j=1;
    while(!a[j].size())da[j++]=1;
    dfs(j);
    for(i=1;i<=n;i++)
        if(!da[i]||a[j].size()%2)
    {fout<<-1;exit(0);}
    prim=j;

}
void euler(int poz)
{ele x;
    while(a[poz].size())
    {
        x=a[poz].back();
        a[poz].pop_back();
        if(!muchie[x.muc])
            {muchie[x.muc]=1;euler(x.y);}


    }
    sol.push_back(poz);
}
void dfs(int x)
{int i;
    da[x]=1;
    for(i=0;i<a[x].size();i++)
        if(!da[a[x][i].y])
            dfs(a[x][i].y);
}