Cod sursa(job #2874842)

Utilizator alexmorosanuMorosanu Alexandru alexmorosanu Data 20 martie 2022 12:44:40
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.94 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> v[100011],back_edge[100011],to_edge[100011];
bool fost[100011];
void dfs(int k)
{
    fost[k]=1;
    while(v[k].empty()==false)
    {
        auto it=v[k].begin();
        int p=*it;
        v[k].erase(it);
        v[p].erase(find(v[p].begin(),v[p].end(),k));
        if(fost[p]==1)
        {
            back_edge[k].push_back(p);
            back_edge[p].push_back(k);
            continue;
        }
        to_edge[k].push_back(p);
        to_edge[p].push_back(k);
        dfs(p);
    }
}
int n,m,i,nod,stop,tata,muc,x,y,j;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    for(i=1;i<=n;i++)
        if(v[i].size()%2==1)
        {
            g<<-1;
            return 0;
        }
    dfs(1);
    nod=stop=1;
    tata=muc=0;
    while(stop)
    {
        stop=0;
        if(muc==0)
        {
            auto it=find(back_edge[nod].begin(),back_edge[nod].end(),tata);
            if(it!=back_edge[nod].end())
                back_edge[nod].erase(it);
        }
        else
        {
            auto it=find(to_edge[nod].begin(),to_edge[nod].end(),tata);
            if(it!=to_edge[nod].end())
                to_edge[nod].erase(it);
        }
        if(back_edge[nod].size()>0)
        {
            tata=nod;
            nod=back_edge[nod][0];
            back_edge[tata].erase(back_edge[tata].begin());
            muc=0;
            stop=1;
            g<<tata<<" ";
            continue;
        }
        if(to_edge[nod].size()>0)
        {
            tata=nod;
            nod=to_edge[nod][0];
            to_edge[tata].erase(to_edge[tata].begin());
            muc=1;
            stop=1;
            g<<tata<<" ";
        }
    }
    return 0;
}