Cod sursa(job #2557700)

Utilizator victorv88Veltan Victor victorv88 Data 25 februarie 2020 22:38:00
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int n, m, a, b;

vector<pair<int,int>>muchii;
vector<int>graph[100005];
bitset<500005>viz;
vector<int>rez;

stack<int>s;

void euler(int ind)
{
    s.push(ind);
    while(!s.empty())
    {
        int sus=s.top();
        if (graph[sus].empty())
        {
            rez.push_back(sus);
            s.pop();
        }
        else
        {
            int ind_ult=graph[sus].back();
            if(!viz[ind_ult])
            {
                if(muchii[ind_ult].first==sus)
                    s.push(muchii[ind_ult].second);
                else
                    s.push(muchii[ind_ult].first);
                viz[ind_ult]=1;
            }
            graph[sus].pop_back();
        }
    }
}

int main()
{
    f >> n >> m;
    for (int i=0; i<m; ++i)
    {
        f  >> a >> b;
        muchii.push_back({a,b});
        graph[a].push_back(i);
        graph[b].push_back(i);
    }
    euler(1);
    rez.pop_back();
    for (auto &v:rez)
        g <<v <<' ';
    return 0;
}