Cod sursa(job #2331217)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 29 ianuarie 2019 12:41:41
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
bitset <500200> fr;
vector < pair<int,int> >L[100011];
int n,m,i,x,y,d[100011],k,nod,vecin;
int stiva [1000000];
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>x>>y;
        d[x]++;
        d[y]++;
        L[x].push_back({y,i});
        L[y].push_back({x,i});
    }
    for(i=1;i<=n;i++)
        if(d[i]%2==1)
    {
        fout<<-1;
        return 0;
    }
    stiva[1]=1;
    k=1;
    while(k!=0){
      nod=stiva[k];
    if(L[nod].size()==0)
        {
            if(k!=1)
            fout<<nod<<" ";
            k--;
            continue;
        }
        while(L[nod].size()>=1&&fr[ L[nod].back().second]==1)
        L[nod].pop_back();
        if(L[nod].size()==0)
        {
            if(k!=1)
            fout<<nod<<" ";
            k--;
            continue;
        }
     vecin=L[nod].back().first;
     stiva[++k]=vecin;
     d[nod]--;
     d[vecin]--;
     fr[L[nod].back().second]=1;
     L[nod].pop_back();
    }

}