Cod sursa(job #2424233)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 22 mai 2019 20:04:59
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

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

vector<pair<int, int> > Muchii[100005];
vector<int> Traseu;
bool viz[100005];

void CicluEuler(int nod)
{
    stack<int> st;
    st.push(1);
    while(!st.empty()){
        auto p = st.top();
        if(Muchii[p].size() == 0){
            Traseu.push_back(p);
            st.pop();
        }
        else {
            int next = Muchii[p].back().first;
            int edge = Muchii[p].back().second;
            Muchii[p].pop_back();
            if(!viz[edge]){
                viz[edge] = 1;
                st.push(next);
            }
        }
    }
}

int main()
{
    int n, m;
    fin >> n >> m;

    for(int i = 1; i <= m; ++i)
    {
        int x, y;
        fin >> x >> y;

        Muchii[x].push_back({y, i});
        Muchii[y].push_back({x, i});
    }

    for(int i = 1; i <= n; ++i)
        if(Muchii[i].size() % 2 == 1)
        {
            fout << -1 << '\n';
            return 0;
        }

    CicluEuler(1);


    for(int i = 0; i < Traseu.size() - 1; ++i)
        fout << Traseu[i] << ' ';
    fout << '\n';
    return 0;
}