Cod sursa(job #2361678)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 2 martie 2019 17:53:00
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include<bits/stdc++.h>
using namespace std;

const int maxN=(1e5)+5;

vector<int> eulercyc;
vector<pair<int,int> > v[maxN];
bool seen[5*maxN];

inline void euler(int nod)
{
    while(!v[nod].empty())
    {
        while(!v[nod].empty() && seen[v[nod].back().second]) v[nod].pop_back();
        if(!v[nod].empty())
        {
            seen[v[nod].back().second]=1;
            int x=v[nod].back().first;
            v[nod].pop_back();
            euler(x);
        }
    }
    eulercyc.push_back(nod);
}

int n,m,x,y;
int deg[maxN];

int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);

    scanf("%d%d",&n,&m);

    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        v[x].push_back({y,i});
        v[y].push_back({x,i});

    }

    for(int i=1;i<=n;i++)
        if((int)v[i].size()%2)
    {
        printf("-1\n");
        return 0;
    }

    euler(1);


    for(int i=1;i<=m;i++)
        if(!seen[i])
    {
        printf("-1\n");
        return 0;
    }
    eulercyc.pop_back();
    for(auto it:eulercyc)
        printf("%d ",it);

    printf("\n");

    return 0;
}