Cod sursa(job #2606487)

Utilizator patcasrarespatcas rares danut patcasrares Data 27 aprilie 2020 21:17:27
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 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;

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(v[nod].size()&&viz[v[nod].back().second])
            v[nod].pop_back();

        if(v[nod].size()==0)
        {
            s.pop();
            fout<<nod<<' ';
            continue;
        }

        //fout<<v[nod].back().first<<' ';
        s.push(v[nod].back().first);
        viz[v[nod].back().second]=1;
        v[nod].pop_back();
    }

}