Cod sursa(job #3297158)

Utilizator rapidu36Victor Manz rapidu36 Data 21 mai 2025 18:06:36
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
#include <vector>

using namespace std;

struct muchie
{
    int x, y;
};

vector <muchie> e;
vector <bool> folosit;
vector <unsigned int> poz_liste;
vector <vector <int>> a;
vector <int> euler;

int celalalt_varf(muchie m, int x)
{
    return (m.x + m.y - x);
}

void dfs_euler(int x)
{
    while (poz_liste[x] < a[x].size())
    {
        int p = a[x][poz_liste[x]];
        if (!folosit[p])
        {
            int y = celalalt_varf(e[p], x);
            folosit[p] = true;
            dfs_euler(y);
        }
        poz_liste[x]++;
    }
    euler.push_back(x);
}

int main()
{
    ifstream in("ciclueuler.in");
    ofstream out("ciclueuler.out");
    int n, m;
    in >> n >> m;
    e.resize(m);
    folosit.resize(m);
    poz_liste.resize(n + 1, 0);
    a.resize(n + 1);
    for (int i = 0; i < m; i++)
    {
        in >> e[i].x >> e[i].y;
        a[e[i].x].push_back(i);
        a[e[i].y].push_back(i);
    }
    for (int i = 1; i <= n; i++)
    {
        if (a[i].size() > 0)
        {
            dfs_euler(i);
            break;
        }
    }
    if (euler.size() == m + 1)
    {
        for (int i = 0; i < m; i++)
        {
            out << euler[i] << " ";
        }
        out << "\n";
    }
    else
    {
        out << "-1\n";
    }
    in.close();
    out.close();
    return 0;
}