diff --git a/Makefile b/Makefile index c67678d..61ae4e3 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ BUILD_OUT_B_DIR = $(BUILD_DIR)/$(SOL_B)_out DIRS = $(BUILD_DIR) $(BUILD_TARGET_DIR) $(BUILD_GEN_DIR) $(BUILD_VAL_DIR) $(BUILD_CHK_DIR) $(LOG_DIR) $(BUILD_IN_DIR) $(BUILD_OUT_A_DIR) $(BUILD_OUT_B_DIR) $(BUILD_TEST_DIR) -CXXFLAGS = -Wall -O2 -std=c++2a +CXXFLAGS = -Wall -O3 -std=c++2a GENFLAGS = -N $(N) -M $(M) -pm $(pm) SRC_MAIN_FILES = $(wildcard $(SRC_DIR)/*/main.cpp) @@ -66,7 +66,7 @@ $(BUILD_DIR) $(BUILD_TARGET_DIR) $(BUILD_GEN_DIR) $(BUILD_VAL_DIR) $(BUILD_CHK_D $(BUILD_TARGET_DIR)/%: $(SRC_DIR)/%/main.cpp | $(BUILD_TARGET_DIR) @echo "Compiling Solution $< -> $@" - $(CXX) $(CXXFLAGS) -fsanitize=undefined,address -o $@ $< + $(CXX) $(CXXFLAGS) -o $@ $< $(BUILD_GEN_DIR)/%: $(GEN_DIR)/%.cpp | $(BUILD_GEN_DIR) @echo "Compiling Generator $< -> $@" diff --git a/src/bsb/L33.hpp b/src/bsb/L33.hpp index 9561d99..17f73cf 100644 --- a/src/bsb/L33.hpp +++ b/src/bsb/L33.hpp @@ -20,6 +20,13 @@ namespace GMS { using namespace std; using ll = unsigned long long; +using DIST = tuple; +ostream& operator<<(ostream& os, DIST& dist) +{ + os<<'(' << get<0>(dist) << ' ' << get<1>(dist) << ' ' << get<2>(dist) << ')'; + return os; +} + template class L33 { private: @@ -56,20 +63,20 @@ class L33 { assert(!b || it_B->second == b.value()); it_BLIST->erase(it_B); - if (it_BLIST->size() == 0) { + if (it_BLIST->size() == 0 && UB[B] != it_ILIST) { blocks.erase(it_BLIST); if (d01 == 0) D0.erase(it_ILIST); - else { + else if(d01 == 1){ UB.erase(it_ILIST->first); D1.erase(it_ILIST); - if (D1.empty()) { - auto it_BLIST = blocks.emplace(blocks.end()); - auto it_ILIST = D1.emplace(D1.end(), B, it_BLIST); - UB[B] = it_ILIST; - } + // if (D1.empty()) { + // auto it_BLIST = blocks.emplace(blocks.end()); + // auto it_ILIST = D1.emplace(D1.end(), B, it_BLIST); + // UB[B] = it_ILIST; + // } } } } diff --git a/src/bsb/main.cpp b/src/bsb/main.cpp index 29169a4..512527f 100644 --- a/src/bsb/main.cpp +++ b/src/bsb/main.cpp @@ -93,7 +93,7 @@ pair > BMSSP(ll l, vector S, DIST B, const ll k, const ll t) { assert(S.size() <= (1uLL << (l * t))); - // cerr<<"LEVLE "< > BMSSP(ll l, vector S, DIST B, // for(auto i:W) cerr<(B)<<' '<(B)<<' '<(B)< D(M, B); for (auto i : P) D.Insert(i, dist[i]); + // D._debug(std::cerr); + const ll LIMIT = k * (1uLL << (l * t)); // cerr<<"LIMIT: "< U; - DIST B_; + DIST B_ = B; while (U.size() < LIMIT && !D.empty()) { auto [Bi, Si] = D.Pull(); // cerr<(Bi)<<' '<(Bi)<<' '<(Bi)<(Bi_)<<' '<(Bi_)<<' '<(Bi_)< > BMSSP(ll l, vector S, DIST B, if (relex(u, dist[u], len, v, dist[v])) { // cerr<<"OK!"< > BMSSP(ll l, vector S, DIST B, // for(auto [s, _]: K_) cerr<