Cod sursa(job #2168966)

Utilizator dumitru123Patularu Mihai dumitru123 Data 14 martie 2018 12:56:18
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector < pair < int , int > > lista_adiacenta[100003];
bool viz[100003*5];
int n,m,cnt,sol[100003*5];
void euler(int nod)
{
    int a,b;
    while(!lista_adiacenta[nod].empty())
    {
        a=lista_adiacenta[nod].back().second;
        b=lista_adiacenta[nod].back().first;
        lista_adiacenta[nod].pop_back();
        if (!viz[a])
        {
            viz[a]=1;
            euler(b);
        }
    }
    sol[++cnt]=nod;
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        int x,y;
        f>>x>>y;
        lista_adiacenta[y].push_back({x,i});
        lista_adiacenta[x].push_back({y,i});
    }
    for(int i=1;i<=n;++i)///verific sa am gradurile tuturor nodurilor pare
        if(lista_adiacenta[i].size()%2)
    {
        g<<"-1";
        exit(0);
    }
    euler(1);
    for(int i=1;i<cnt;++i)
        g<<sol[i]<<" ";
    return 0;
}