Cod sursa(job #2608788)

Utilizator patcasrarespatcas rares danut patcasrares Data 1 mai 2020 19:11:14
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int DN=101005;
const int DM=501005;
int n,m,f,g,viz[DM];
vector<pair<int,int> >v[DN];
stack<int>s;
vector<int>sol;

int main()
{
    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>f>>g;
        v[f].pb({g,i});
        v[g].pb({f,i});
    }

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

    s.push(1);
    while(!s.empty())
    {
        int nod=s.top();

        while(1)
        {
            if(v[nod].size()==0)
                break;

            if(viz[v[nod].back().second]==0)
                break;

            v[nod].pop_back();
        }
        //cout<<nod<<'\n';
        if(v[nod].size()==0)
        {
            //cout<<nod<<' ';
            s.pop();
            sol.pb(nod);
            continue;
        }

        //fout<<v[nod].back().first<<' ';
        s.push(v[nod].back().first);
        viz[v[nod].back().second]=1;
        v[nod].pop_back();
    }
    reverse(sol.begin(),sol.end());
    sol.pop_back();
    for(auto i:sol)
        fout<<i<<' ';

}