Cod sursa(job #2565519)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 2 martie 2020 14:37:32
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>
#define Dim 100001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int a,b,N,M,A[5*Dim],cnt;
bool viz2[5*Dim];

struct edge
{
    int ver,ord;
};

vector < edge > V[Dim];

bool BFS()
{
    queue < int > qu;
    bool viz[Dim]={0};

    viz[1]=1;
    qu.push(1);

    while(!qu.empty())
    {
        int nod=qu.front();
        qu.pop();
        viz[nod]=2;

        for(unsigned int i=0;i<V[nod].size();i++)
        {
            int vecin=V[nod][i].ver;
            if(!viz[vecin])
            {
                viz[vecin]=1;
                qu.push(vecin);
            }
        }
    }

    for(int i=1;i<=N;i++)
    if( viz[i] != 2 ) return false;
    return true;
}

void DFS(int nod)
{
    while( V[nod].size() )
    {
        int vecin=V[nod].back().ver;
        int idx=V[nod].back().ord;

        V[nod].pop_back();

        if( !viz2[idx] )
        {
            viz2[idx]=1;
            DFS(vecin);
        }
    }
    A[++cnt]=nod;
}

int main()
{
    f>>N>>M;
    for(int i=1;i<=M;i++)
    {
        f>>a>>b;
        V[a].push_back({b,i});
        V[b].push_back({a,i});
    }

    if( BFS() )
    {
        g<<-1<<'\n';
        return 0;
    }

    DFS(1);
    for(int i=1;i<cnt;i++) g<<A[i]<<' ';

    return 0;
}