Cod sursa(job #3294051)

Utilizator Cristian_NegoitaCristian Negoita Cristian_Negoita Data 15 aprilie 2025 14:28:02
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int NMAX = 1e5 + 1, MMAX = 5e5 + 1;
vector<pair<int, int>> vec[NMAX];
vector<int> ans;
int n, m, used, vis[MMAX], poz[NMAX];

void euler(int nod)
{
    while(poz[nod] < vec[nod].size())
    {
        pair<int, int> p = vec[nod][poz[nod]];
        if(!vis[p.second])
        {
            vis[p.second] = 1;
            used++;
            euler(p.first);
        }
        poz[nod]++;
    }
    ans.push_back(nod);
}

signed main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr);

    fin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int x, y;
        fin >> x >> y;
        vec[x].push_back({y, i});
        vec[y].push_back({x, i});
    }
    for(int i = 1; i <= n; i++)
    {
        if(vec[i].size() % 2 == 1)
        {
            fout << -1;
            return 0;
        }
    }
    euler(1);
    if(used != m)
        fout << -1;
    else
        for(int nod : ans)
            fout << nod << " ";

    return 0;
}