Cod sursa(job #2375156)

Utilizator silviumihailSilviu Mihail silviumihail Data 7 martie 2019 22:38:52
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;
int n,m,x,i,y,node,muchie;
vector<int>g[100010],q,ans;
pair<int,int>v[500010];
bool ap[500010];
int main()
{
    ifstream cin ("ciclueuler.in");
    ofstream cout ("ciclueuler.out");
    cin>>n>>m;
    for(i=1; i<=m; ++i)
    {
        cin>>x>>y;
        g[x].push_back(i);
        g[y].push_back(i);
        v[i]= {x,y};
    }
    for(i=1; i<=n; ++i)
        if(g[i].size()%2==1)
        {
            cout<<-1;
            return 0;
        }
    q.push_back(1);
    while(!q.empty())
    {
        node=q.back();
        if(!g[node].empty())
        {
            muchie=g[node].back();
            g[node].pop_back();
            if(ap[muchie])continue;
            ap[muchie]=true;
            if(v[muchie].first==node)q.push_back(v[muchie].second);
            else q.push_back(v[muchie].first);
        }
        else
        {
            q.pop_back();
            ans.push_back(node);
        }
    }
    ans.pop_back();
    for(auto &it:ans)cout<<it<<" ";
    return 0;
}