Cod sursa(job #2846674)

Utilizator TiberiwTiberiu Amarie Tiberiw Data 9 februarie 2022 15:04:58
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define Mmax 500005
#define Nmax 100005
using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

struct three{
    int first,second;
    bool third;
};
three M[Mmax];
vector<int>G[Nmax],sol;
int n,m;

bool Verif()
{
    for(int i = 1; i <= n; i++)
        if(G[i].size() & 1)
        return 0;
    return 1;
}

void Euler(int nod)
{

    for(vector<int>::iterator it = G[nod].begin(); it < G[nod].end(); it++)
    {
       int muchie = *it;
       if(!M[muchie].third)
       {
           M[muchie].third = true;
            if(M[muchie].first == nod)
                Euler(M[muchie].second);
            else
                Euler(M[muchie].first);
       }


    }

    sol.push_back(nod);




}


int main()
{
    f>>n>>m;
    for(int i = 1; i <= m; i++)
    {
        int x,y;
        f>>x>>y;
        M[i]={x,y,false};
        G[x].push_back(i);
        G[y].push_back(i);

    }
    if(!Verif())
    {
        cout<<"-1\n";
        return 0;
    }

    Euler(1);

    g<<sol.size()-1<<"\n";
    for(vector<int>::reverse_iterator it = sol.rbegin(); it < sol.rend()-1; it++)
    g<<*it<<" ";

    return 0;
}