Cod sursa(job #2124872)

Utilizator cristii2000cristiiPanaite Cristian cristii2000cristii Data 7 februarie 2018 18:03:44
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");

const int MAX = 1000005;

struct edge
{
    int x, y;
    bool ap = false;
}v[MAX];

vector <int> g[MAX];

stack <int> stiva;

int n, m;

void citire()
{
    in >> n >> m;

    for(int i = 1; i <= m; i++)
    {
        in >> v[i].x >> v[i].y;
        g[v[i].x].push_back(i);
        g[v[i].y].push_back(i);
    }
}

bool verifGrad()
{
    for(int i = 1; i <= n; i++)
        if(g[i].size() % 2 != 0)
            return false;
    return true;
}

void parcurgere()
{
    stiva.push(1);
    while(!stiva.empty())
    {
        int nod = stiva.top();

        if(g[nod].size())
        {
            int next = g[nod].back();
            g[nod].pop_back();

            if(v[next].ap == true)
                continue;

            v[next].ap = true;

            if(v[next].x == nod)
                stiva.push(v[next].y);
            else
                stiva.push(v[next].x);
        }
        else
        {
            out << stiva.top() << " ";
            stiva.pop();
        }
    }
}

int main()
{
    citire();
    if(!verifGrad())
    {
        out << "-1";
        return 0;
    }
    parcurgere();
    return 0;
}