Cod sursa(job #2142133)

Utilizator stefanchistefan chiper stefanchi Data 24 februarie 2018 19:23:45
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <cstdio>
#include <vector>
#include <stack>
#include <bitset>

using namespace std;
const int MMAX = 500005;
const int NMAX = 100005;
int n,m;

bitset <MMAX> viz;
stack <int> stiva;
vector <int> graf[NMAX];


struct muchie{

 int a,b;
}listamuchi[MMAX];

void algoritm()
{
    stiva.push(1);
    while(!stiva.empty())
    {
        int nod = stiva.top();
        if(!graf[nod].empty())
        {
            int vecin = graf[nod].back();
            graf[nod].pop_back();
            if(viz[vecin] == true)
                continue;
            viz[vecin] = true;
            if(listamuchi[vecin].a == nod)
            {
                stiva.push(listamuchi[vecin].b);
            }
            else
            {
                stiva.push(listamuchi[vecin].a);
            }
        }
        else
        {
            printf("%d ",nod);
            stiva.pop();
        }
    }
}


void read()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d %d",&n,&m);
    int a,b;
    for(int i = 0 ; i < m ; i++)
    {
        scanf("%d %d",&a,&b);
        listamuchi[i].a = a;
        listamuchi[i].b = b;
        graf[a].push_back(i);
        graf[b].push_back(i);
    }
    for(int i = 0 ; i< n ; i++)
        if(graf[i].size()%2 == 1)
        {
            printf("-1");
            return;
        }
    algoritm();

}


int main()
{
    read();
    return 0;
}