Submission #1150276

#TimeUsernameProblemLanguageResultExecution timeMemory
1150276cot7302Two Transportations (JOI19_transportations)C++20
100 / 100
311 ms49024 KiB
#include "Azer.h" #include <bits/stdc++.h> #define ALL(X) begin(X), end(X) using namespace std; namespace { using i64 = long long; template <class T> using vec = vector<T>; template <class T> constexpr T infty = 0; template <> constexpr int infty<int> = 1'000'000'000; template <> constexpr i64 infty<i64> = 1'000'000'000'000'000'000; int N, X, ff, cnt, lst, vis_cnt; vec<int> dis; vec<bool> vis; priority_queue<pair<int, int>> pq; vec<vec<pair<int, int>>> g; void send_number(int x, int b) { assert(x >= 0); for (int i = b - 1; i >= 0; i--) { SendA((x >> i) & 1); } } void send_dis() { if (vis_cnt == N) { return; } while (!empty(pq) && vis[pq.top().second]) { pq.pop(); } if (empty(pq)) { send_number((1 << 9) - 1, 9); } else { send_number(-pq.top().first - lst, 9); } } void relax(int i) { for (auto [to, w] : g[i]) { if (dis[to] > dis[i] + w) { pq.emplace(-(dis[to] = dis[i] + w), to); } } } } void InitA(int N, int A, vec<int> U, vec<int> V, vec<int> C) { ::N = N; g.resize(N); dis.resize(N, infty<int>); vis.resize(N, false); for (int i = 0; i < A; i++) { g[U[i]].emplace_back(V[i], C[i]); g[V[i]].emplace_back(U[i], C[i]); } dis[0] = 0; vis[0] = true; vis_cnt = 1; relax(0); send_dis(); } void ReceiveA(bool f) { if (ff == 0) { if (cnt++ < 9) { X = X * 2 + f; if (cnt == 9) { if (!empty(pq) && -pq.top().first - lst <= X) { auto [d, i] = pq.top(); d = -d; lst = d; pq.pop(); vis[i] = true; vis_cnt += 1; relax(i); send_number(i, 11); send_dis(); } else { ff = 1; lst += X; } cnt = 0; X = 0; } } } else { if (cnt++ < 11) { X = X * 2 + f; if (cnt == 11) { dis[X] = lst; vis[X] = true; vis_cnt += 1; relax(X); send_dis(); ff = 0; cnt = 0; X = 0; } } } } std::vector<int> Answer() { return dis; }
#include "Baijan.h" #include <bits/stdc++.h> #define ALL(X) begin(X), end(X) using namespace std; namespace { using i64 = long long; template <class T> using vec = vector<T>; template <class T> constexpr T infty = 0; template <> constexpr int infty<int> = 1'000'000'000; template <> constexpr i64 infty<i64> = 1'000'000'000'000'000'000; int N, X, ff, cnt, lst, vis_cnt; vec<int> dis; vec<bool> vis; priority_queue<pair<int, int>> pq; vec<vec<pair<int, int>>> g; void send_number(int x, int b) { assert(x >= 0); for (int i = b - 1; i >= 0; i--) { SendB((x >> i) & 1); } } void send_dis() { if (vis_cnt == N) { return; } while (!empty(pq) && vis[pq.top().second]) { pq.pop(); } if (empty(pq)) { send_number((1 << 9) - 1, 9); } else { send_number(-pq.top().first - lst, 9); } } void relax(int i) { for (auto [to, w] : g[i]) { if (dis[to] > dis[i] + w) { pq.emplace(-(dis[to] = dis[i] + w), to); } } } } void InitB(int N, int A, vec<int> U, vec<int> V, vec<int> C) { ::N = N; g.resize(N); dis.resize(N, infty<int>); vis.resize(N, false); for (int i = 0; i < A; i++) { g[U[i]].emplace_back(V[i], C[i]); g[V[i]].emplace_back(U[i], C[i]); } dis[0] = 0; vis[0] = true; vis_cnt = 1; relax(0); send_dis(); } void ReceiveB(bool f) { if (ff == 0) { if (cnt++ < 9) { X = X * 2 + f; if (cnt == 9) { if (!empty(pq) && -pq.top().first - lst < X) { auto [d, i] = pq.top(); d = -d; lst = d; pq.pop(); vis[i] = true; vis_cnt += 1; relax(i); send_number(i, 11); send_dis(); } else { ff = 1; lst += X; } cnt = 0; X = 0; } } } else { if (cnt++ < 11) { X = X * 2 + f; if (cnt == 11) { dis[X] = lst; vis[X] = true; vis_cnt += 1; relax(X); send_dis(); ff = 0; cnt = 0; X = 0; } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...