Cod sursa(job #2963703)

Utilizator mihaistamatescuMihai Stamatescu mihaistamatescu Data 11 ianuarie 2023 21:33:42
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;
//struct str {int nod, muc;};
vector<int> L[100010];
int grad[500010];
int st[500010];
int sol[500010];
int n, m, x, y, vf, nr;

int main() {
    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");
    fin >> n >> m;
    for (int i = 1; i <= m; i++) {
        fin >> x >> y;
        L[x].push_back(y);
        L[y].push_back(x);
        grad[x]++;
        grad[y]++;
    }
    for (int i = 1; i <= n; i++) {
        if (grad[i] % 2 != 0) {
            fout << -1;
            return 0;
        }
    }
    st[++vf] = 1;
    while (vf > 0) {
        int crt = st[vf];
        if (grad[crt] == 0) {
            vf--;
            sol[++nr] = crt;
            continue;
        }
        int vec = L[crt].front();
        st[++vf] = vec;
        grad[crt]--;
        grad[vec]--;
        L[vec].erase(remove(L[vec].begin(), L[vec].end(), crt), L[vec].end());
        L[crt].erase(remove(L[crt].begin(), L[crt].end(), vec), L[crt].end());
    }
    for (int i = 1; i <= nr; i++) {
        fout << sol[i] << " ";
    }
    return 0;
}