Cod sursa(job #2477423)

Utilizator mihaimodiMihai Modi mihaimodi Data 20 octombrie 2019 12:41:09
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector < pair < int ,int > > g[100001];
int x, y, n, m, k, p;
int gr[100001],c[100001],start[100001],euler[500001];
bool viz[500001];
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        gr[x]++,gr[y]++;
        g[x].push_back({y,i});
        g[y].push_back({x,i});
    }
    for(int i=1;i<=n;i++)
        if(gr[i]!=0)
        {
            if(gr[i]%2!=0)
            {
                fout<<-1;
                return 0;
            }
            if(!k)
                k=i;
        }

    c[1]=k;
    while(k>0)
    {
        if(gr[c[k]])
            for(int i=0;i<g[c[k]].size();i++)
            {
                int nod=g[c[k]][i].first;
                int arc=g[c[k]][i].second;
                if(!viz[arc])
                {
                    gr[nod]--;
                    gr[c[k]]--;
                    viz[arc]=1;
                    c[++k]=nod;
                    start[c[k]]=i+1;
                    break;
                }
            }
        else
        {
            euler[++p]=c[k];
            k--;
        }

    }
    if(p-1!=m)
    {
        fout<<-1;
        return 0;
    }
    for(int i=1;i<p;i++)
        fout<<euler[i]<<' ';
    return 0;
}