Cod sursa(job #1608403)

Utilizator Vally77FMI Calinescu Valentin Gelu Vally77 Data 22 februarie 2016 01:44:36
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream ka("ciclueuler.in");
ofstream ki("ciclueuler.out");
const int N_MAX = 100000;
const int M_MAX = 500000;

struct muchie
{
    int index, id;
};

vector <muchie> graf[N_MAX + 1];
stack <int> stiva;

bool folosita[M_MAX + 1];
int grad[N_MAX + 1];

int n, m, a, b;

int main()
{
    ka >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        ka >> a >> b;
        grad[a]++;
        grad[b]++;
        muchie mm;
        mm.index = b;
        mm.id = i;
        graf[a].push_back(mm);
        mm.index = a;
        graf[b].push_back(mm);
    }
    bool eulerian = true;
    for(int i = 1; i <= n && eulerian; i++)
        if(grad[i] == 0 || grad[i] % 2 == 1)
            eulerian = false;
    if(!eulerian)
        ki << -1;
    else
    {
        stiva.push(1);
        while(!stiva.empty())
        {
            int t = stiva.top();
            bool gasita = false;
            for(int i = 0; i < graf[t].size() && !gasita; i++)
                if(!folosita[graf[t][i].id])
                {
                    folosita[graf[t][i].id] = true;
                    gasita = true;
                    stiva.push(graf[t][i].index);
                }
            if(!gasita)
            {
                if(stiva.size() != 1)
                    ki << t << " ";
                stiva.pop();
            }
        }
    }
}