Cod sursa(job #2572542)

Utilizator mihaimodiMihai Modi mihaimodi Data 5 martie 2020 13:18:01
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,k,x,y,nr;
vector < pair <int, int> > g[100001];
int start[100001],gr[100001],c[100001],st[500001];
bool viz[500001];
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        g[x].push_back({y,i});
        g[y].push_back({x,i});
        gr[x]++,gr[y]++;
    }
    for(int i=1;i<=n;i++)
        if(gr[i]%2!=0)
        {
            fout<<-1;
            return 0;
        }
   st[k=1]=1;
   while(k>0)
   {
        if(gr[st[k]]>0)
        {
            int nod=st[k];
            for(;start[nod]<g[nod].size();start[nod]++)
            {
                int poz=g[nod][start[nod]].second;
                int nou=g[nod][start[nod]].first;
                if(viz[poz]==0)
                {
                    viz[poz]=1;
                    gr[nod]--;
                    gr[nou]--;
                    st[++k]=nou;
                    start[nod]++;
                    break;
                }

            }
        }
        else
        {
            c[++nr]=st[k];
            k--;
        }
   }
   for(int i=nr;i>=2;i--)
        fout<<c[i]<<' ';
   return 0;
}