Cod sursa(job #2309654)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 29 decembrie 2018 15:39:55
Problema Ciclu Eulerian Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using cd = complex<double>;

int buf[500000 + 10] = {}, *p = buf;

int e_xor[500000 + 10];
bitset<500000 + 10> is_rem;
vector<int> vec[100000 + 10];

static void dfs(int curr){
    *p++ = curr;
    while(!vec[curr].empty()){
        if(is_rem[vec[curr].back()])
            vec[curr].pop_back();
        else{
            is_rem[vec[curr].back()] = 1;
            dfs(e_xor[vec[curr].back()] ^ curr);
        }
    }
}
            

int main(){
    ifstream f("ciclueuler.in");
    ofstream g("ciclueuler.out");

    int n, m;
    f >> n >> m;

    for(int i = 0; i < m; ++i){
        int x, y;
        f >> x >> y;

        vec[x].push_back(i);
        vec[y].push_back(i);

        e_xor[i] = (x ^ y);
    }

    dfs(1);

    --p;
    if(p - buf != m) g << -1 << '\n';
    else while(p > buf)
        g << *--p << ' ';

    return 0;
}