Cod sursa(job #3337291)

Utilizator petru-robuRobu Petru petru-robu Data 27 ianuarie 2026 09:44:49
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

int n, m;
vector<vector<pair<int, int>>> adj_list;
vector<int> visited, ans;

void read()
{
    fin >> n >> m;

    adj_list.assign(n + 1, {});
    visited.assign(m + 1, 0);

    for (int i = 1; i <= m; i++)
    {
        int x, y;
        fin >> x >> y;

        adj_list[x].push_back({y, i});
        adj_list[y].push_back({x, i});
    }
}

void euler(int x)
{
    while (!adj_list[x].empty())
    {
        auto [v, e] = adj_list[x].back();
        adj_list[x].pop_back();

        if (!visited[e])
        {
            // nu e din ciclul meu
            visited[e] = 1;
            euler(v);
        }
    }

    ans.push_back(x);
}

int main()
{
    read();

    for (int i = 1; i <= n; i++)
        if (adj_list[i].size() % 2 == 1)
        {
            fout << -1;
            return 0;
        }

    euler(1);

    if (ans.size() != m + 1)
    {
        fout << -1;
        return 0;
    }

    for (int i = 1; i <= m; i++)
        fout << ans[i] << ' ';

    return 0;
}