Cod sursa(job #2864345)

Utilizator cdenisCovei Denis cdenis Data 7 martie 2022 19:52:47
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int MAXn=1e5+5;
const int MAXm=5e5+5;
int n,m,used[MAXm],from[MAXm],to[MAXm],a,b;
vector < int > st,sol,v[MAXn];

int main()
{
    fin >> n >> m;
    for(int i=1;i<=m;i++)
    {
        fin >> a >> b;
        v[a].push_back(i);
        v[b].push_back(i);
        from[i]=a;
        to[i]=b;
    }
    /// nu se mai verifica conexitatea
    for(int i=1;i<=n;i++)
        if(v[i].size()%2) /// verifica daca gradul e 2
        {
            fout << -1;
            return 0;
        }
    st.push_back(1);
    while(!st.empty())
    {
        int nod=st.back();
        if(!v[nod].empty())
        {
            int mch=v[nod].back();
            v[nod].pop_back();
            if(!used[mch])
            {
                used[mch]=1;
                int to=::to[mch]^::from[mch]^nod;
                st.push_back(to);
            }
        }
        else
        {
            st.pop_back();
            sol.push_back(nod);
        }
    }
    for(int i=0;i<sol.size()-1;i++)
        fout << sol[i] << " ";
    return 0;
}