Cod sursa(job #2988051)

Utilizator PHOSSESSEDProsie Radu-Teodor PHOSSESSED Data 3 martie 2023 15:25:47
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
#include<vector>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;

ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");

const int NMAX = 2e5 + 1;

vector<pair<int,int>> vecini[NMAX];

int grad[NMAX];

bool folosit[5 * NMAX + 1];

bool u; int sterg;

void euler(int nod)
{
    for(auto it : vecini[nod])
        {
            if(folosit[it.second])
                continue;

            folosit[it.second] = 1;
            euler(it.first);
        }

    if(nod == sterg)
        {
            if(!u)
                {
                    cout << nod << " ";
                    u = true;
                }
        }

    else cout << nod << " ";
}

int main()
{

     int n,m,a,b;
     cin >> n >> m;
     for(int i = 1; i <= m ; i++)
        {
            cin >> a >> b;
            vecini[a].push_back({b,i});
            vecini[b].push_back({a,i});
            grad[a]++,grad[b]++;
        }

    bool ok = true;
    for(int i = 1; i <= n ; i++) if(grad[i] & 1) ok = false;
    if(!ok) cout << -1;
    else
        {
            for(int i = 1; i <= n ; i++) if(grad[i] % 2 == 0)
                {
                    sterg = i; euler(i);
                    break;
                }

        }

}