Cod sursa(job #1814109)

Utilizator Vlad1111Sbengheci Vlad-Andrei Vlad1111 Data 23 noiembrie 2016 17:43:32
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <bitset>
#define cout cerr
#define MAX 100005
using namespace std;

int n,m,x,y;
//vector <int> a[MAX];
vector <int> a[MAX];
stack <int> b;
stack <int> coada;
pair <int, int> muchii[5*MAX];
bitset<5*MAX> vis;

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);
        a[x].push_back(i);
        a[y].push_back(i);
        muchii[i]=make_pair(x,y);
        vis[i]=1;
    }

    bitset<1> TR=0;
    for(int i=1; i<=n; i++)
        if(a[i].size()%2==1)
            TR[0]=1;

    if(TR[0])
        printf("-1");
    else
    {
        coada.push(1);
        while(coada.size())
        {
            int k=coada.top();
            //cout<<k<<": ";
            if(a[k].size())
            {
                x=a[k].back();
                a[k].pop_back();
                if(vis[x])
                {
                    if(muchii[x].first == k)
                        coada.push(muchii[x].second);
                    else coada.push(muchii[x].first);
                    vis[x]=0;
                }
            }
            else
            {
                printf("%d ",k);
                coada.pop();
            }
        }

    }

    return 0;
}