Cod sursa(job #2642327)

Utilizator marinaoprOprea Marina marinaopr Data 14 august 2020 18:46:55
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <stdio.h>
#include <vector>
#include <stack>

#define NMAX 100005
#define MMAX 500005

using namespace std;

FILE *fin = fopen("ciclueuler.in", "r");
FILE *fout = fopen("ciclueuler.out", "w");

vector <int> g[NMAX];
stack <int> stiva;

struct muchie {int inc; int sf;} arc[MMAX];

int n,m,i,lat,nod,x,y;
bool ok,viz[MMAX];

int main()
{
    fscanf(fin, "%d%d", &n,&m);
    for(i=1; i<=m; ++i)
    {
        fscanf(fin, "%d%d", &x,&y);

        g[x].push_back(i);
        g[y].push_back(i);
        arc[i].inc = x;
        arc[i].sf = y;
    }

    ok = true;
    for(i=1; i<=n; ++i)
        if(!g[i].empty() and g[i].size()%2)
            ok = false;
    if(!ok)
        fprintf(fout, "-1");
    else
    {
        stiva.push(1);
        while(!stiva.empty())
        {
            nod = stiva.top();
            if(g[nod].size())
            {
                lat = g[nod].back();
                g[nod].pop_back();

                if(!viz[lat])
                {
                    if(nod == arc[lat].inc)
                        stiva.push(arc[lat].sf);
                    else
                        stiva.push(arc[lat].inc);
                    viz[lat] = true;
                }
                else ;
            }
            else
            {
                fprintf(fout, "%d ", nod);
                stiva.pop();
            }
        }
    }

    fclose(fin);
    fclose(fout);
    return 0;
}