Cod sursa(job #2375340)

Utilizator pinbuAdi Giri pinbu Data 8 martie 2019 02:07:26
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
#define N 100001
#define M 500001
using namespace std;

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

vector<pair<int,int>> v[N];
vector<int> sol;
stack<int> s;
bool viz[M];
int n,m;

int main()
{
    int i,a,b,nod;
    
    fin>>n>>m;
    
    //citire
    for(i=1;i<=m;i++)
    {
        fin>>a>>b;
        v[a].push_back(make_pair(b,i));
        v[b].push_back(make_pair(a,i));
    }
    
    //verificam daca exista un nod cu grad par
    for(i=1;i<=n;i++)
        if(v[i].size()%2!=0)
        {
            fout<<"-1";
            return 0;
        }
    
    //algoritmul lui Hierholzer
    
    s.push(1);
    
    while(!s.empty())
    {
        nod=s.top();
        
        if(v[nod].size()!=0)
        {
            a=v[nod].back().first;
            b=v[nod].back().second;
            v[nod].pop_back();
            
            if(!viz[b])
            {
                viz[b]=true;
                s.push(a);
            }
        }
        else
        {
            s.pop();
            sol.push_back(nod);
        }
    }
    
    sol.pop_back();
    
    for(auto s:sol)
        fout<<s<<" ";
    return 0;
}