Cod sursa(job #2326520)

Utilizator cristian.cutitei27Cutitei Cristian cristian.cutitei27 Data 23 ianuarie 2019 16:59:38
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>

#include <fstream>

#include <stack>

#include <vector>

#include <bitset>



using namespace std;

ifstream fin("ciclueuler.in");

ofstream fout("ciclueuler.out");

bitset<500005> Bit;

stack<int> Stac;

vector <pair <int,int> >G[100005];

int n,m;

void citire()

{

    fin>>n>>m;

    for(int i=0; i<m; i++)

    {
        int x,y;

        fin>>x>>y;

        G[x].push_back({i,y});

        G[y].push_back({i,x});

    }

}

void euler()

{

    Stac.push(1);

    while(!Stac.empty())

    {

        int x=Stac.top();

        int ok=0;

        while (G[x].size()!=0 && Bit[G[x].back().first])

            G[x].pop_back();


        if(!G[x].empty())

        {

            int vecin = G[x].back().second;

            Bit[G[x].back().first] = 1;

            ok=1;

            G[x].pop_back();

            Stac.push(vecin);

        }

        if(ok==0)
        {
            Stac.pop();
            if(!Stac.empty()) fout<<x<<" ";
        }

    }

}

void rez()

{
    int ok=1;

    for(int i=1; i<=n; i++)

        if(G[i].size()%2)
        {
            ok=0;
            fout<<"-1";
        }

    if(ok)

        euler();

}

int main()

{

    citire();

    rez();

    return 0;

}