Cod sursa(job #1916279)

Utilizator ciprianprohozescuProhozescu Ciprian ciprianprohozescu Data 9 martie 2017 08:51:53
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <stack>
#define NMAX 100010
#define MMAX 100010

using namespace std;

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

struct muchie
{
    int a, b;
};

int n, m, nr;
vector<int> A[NMAX], sol;
stack<int> S;
bool viz[MMAX];
muchie M[MMAX];

int main()
{
    int a, b, i, nod, urm, aux;
    fin >> n >> m;
    for (i = 1; i <= m; i++)
    {
        fin >> a >> b;
        A[a].push_back(i);
        A[b].push_back(i);
        M[i].a = a;
        M[i].b = b;
    }
    S.push(1);
    while (!S.empty())
    {
        nod = S.top();
        if (!A[nod].empty())
        {
            aux = A[nod].back();
            A[nod].pop_back();
            if (!viz[aux])
            {
                viz[aux] = 1;
                nr++;
                if (nod == M[aux].a)
                    urm = M[aux].b;
                else
                    urm = M[aux].a;
                S.push(urm);
            }
        }
        else
        {
            S.pop();
            sol.push_back(nod);
        }
    }
    if (nr < m)
        fout << -1;
    else
    {
        for (i = 0; i < sol.size() - 1; i++)
            fout << sol[i] << ' ';
    }
    fout << '\n';
    fout.close();
    return 0;
}