Cod sursa(job #2849638)

Utilizator razvanalexrotaruRazvan Alexandru Rotaru razvanalexrotaru Data 15 februarie 2022 13:23:12
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream cin ("ciclueuler.in");
ofstream cout ("ciclueuler.out");
vector<int>G[100008];
vector<int>stackk;
vector<int>ans;
int car[500008],n,m,i,k,din[100008],in[100008];
int main()
{
    cin>>n>>m;
    for(i=1;i<=m;++i)
    {
        int x,y;
        cin>>x>>y;
        G[x].push_back(i);
        G[y].push_back(i);
        in[i]=y;
        din[i]=x;
    }
    for (i=1;i<=n;i++)
        if (G[i].size()%2)
            break;
    if (i<=n)
    {
        cout<<"-1";
        exit(0);
    }
    stackk.push_back(1);
    while(!stackk.empty())
    {
        k=stackk.back();
        if(!G[k].empty())
        {
            int i=G[k].back();
            G[k].pop_back();
            if(car[i]==0)
            {
                car[i]=1;
                if(in[i]==k)
                    stackk.push_back(din[i]);
                    else
                    stackk.push_back(in[i]);
            }
        }
        else
        {
            stackk.pop_back();
            ans.push_back(k);
        }
    }
    int j;
    for(j=0;j<m;j++)
        cout<<ans[j]<<" ";
    return 0;
}