Cod sursa(job #2299169)

Utilizator roberttrutaTruta Robert roberttruta Data 9 decembrie 2018 00:00:39
Problema Ciclu Eulerian Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <vector>
using namespace std;
vector <pair<int , int> > v[100005];
int n,m,i,x,y,nr,bk,start,start2,Max,val[100005],identic[100005],poz[100005];
int main()
{
    ifstream f("ciclueuler.in");
    ofstream g("ciclueuler.out");
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        if(x!=y)
        {
            val[x]++;
            val[y]++;
        v[x].push_back(make_pair(y,v[y].size()));
        v[y].push_back(make_pair(x,v[x].size()-1));
        }
        else
            identic[x]++;
    }
    for(i=1;i<=n;i++)
    {
        if(val[i]>Max)
    {
            Max=val[i];
            start=i;
    }
        if(val[i]%2==1)
    {
        nr++;
        start2=i;
    }
    }
    if(nr>2)
        g<<-1;
    else
    {
        i=1;
        if(nr==2)
            start=start2;
        while(i<=m)
        {
            g<<start<<' ';
            while(identic[start])
            {
                g<<start<<' ';
                identic[start]--;
                i++;
            }
            while(v[start][poz[start]].first==-1)
                poz[start]++;
            bk=start;
            start=v[start][poz[start]].first;
            v[start][v[bk][poz[bk]].second].first=-1;
            poz[bk]++;
            i++;
        }
    }
    return 0;
}