Cod sursa(job #2869422)

Utilizator RTG123Razvan Diaconescu RTG123 Data 11 martie 2022 15:24:54
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define MAXN 100001
#define MAXM 500001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m,x,y,to[MAXN],nr,from[MAXN],muchiesused[MAXM],afis[MAXM],viz[MAXN];
vector <vector <int>> v(MAXN);
void dfs (int start)
{
    stack <int> st;
    st.push(start);
    while (!st.empty())
    {
        int a=st.top();
        if (!v[a].empty())
        {
            //if (viz[a]==0)
            //{
                //viz[a]=1;

            int nextnod=v[a].back(),next=0;
            v[a].pop_back();
            if (muchiesused[nextnod]==0)
            {
                muchiesused[nextnod]=1;
            if (from[nextnod]==a)
            {
                next=to[nextnod];
            }
            else next=from[nextnod];
            st.push(next);
            }
            //}
        }
        else
        {
            st.pop();
            nr++;
            afis[nr]=a;
        }
    }
}
int main()
{
    f>>n>>m;
    for (int i=1; i<=m; i++)
    {
        f>>x>>y;
        v[x].push_back(i);
        if (x!=y)
        {
        v[y].push_back(i);
        }
        from[i]=x;
        to[i]=y;
    }
    dfs(1);
    if (afis[1]!=afis[nr])
        g<<-1;
    else
    {
    for (int i=1; i<nr; i++)
        g<<afis[i]<<' ';
    }
    return 0;
}