Cod sursa(job #2537764)

Utilizator KataIsache Catalina Kata Data 3 februarie 2020 22:21:10
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>
#include<stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <pair <int,int> > G[100003];
stack <int> S;
vector <int> Ans;
bool uz[500003];
void fct( int nod);
int main()
{
    int n,i,m,x,y,ok=1,id;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        G[x].push_back({y,i});
        G[y].push_back({x,i});
    }
    for(i=1;i<=n;++i)
        if(G[i].size()%2)
            ok=0;
    if(!ok) fout<<-1;
    else{
    S.push(1);
    while(!S.empty())
    {
        int nod=S.top();
        while(!G[x].empty()&&uz[G[x].back().second])//verific daca mai are muchii valabile
            G[x].pop_back();
        if(!G[x].empty())
        {
            y=G[x].back().first;
            id=G[x].back().second;
            G[x].pop_back();

            if(!uz[id])
            {
                uz[id]=1;
                S.push(y);
            }

        }
        else
        {
            Ans.push_back(x);
            S.pop();
        }
    }
     for(int i=0;i<Ans.size()-1;++i)
        fout<<Ans[i]<<' ';
    }
    return 0;
}