Cod sursa(job #2868517)

Utilizator BogdanDuminicaDuminica Bogdan BogdanDuminica Data 10 martie 2022 23:14:54
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <cassert>
#include <vector>
using namespace std;

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

int n;

vector<int> G[500002], L;
vector<pair<int,int>> M;
vector<bool> elim;

void Euler(int k)
{
    for(auto x : G[k])
    {
        //x = indicele muchiei
        //M[x].first = k
        //M[x].second = cealalta extremitate
        if(!elim[x])
        {
            elim[x] = 1;
            int p = M[x].second;
            if(p == k)
                p = M[x].first;
            Euler(p);
        }
    }
    L.push_back(k);
}

int main()
{
    int i , j,muc;
    fin >> n>>muc;
    while(fin >> i >> j)
    {
        M.push_back({i,j});
        elim.push_back(false);
        G[i].push_back(M.size()-1);
        G[j].push_back(M.size()-1);
    }
    Euler(1);
    L.pop_back();
    for(auto k : L)
        fout << k << " ";
    return 0;
}