Submission #1222598

#TimeUsernameProblemLanguageResultExecution timeMemory
1222598TriseedotTwo Transportations (JOI19_transportations)C++20
0 / 100
3079 ms35916 KiB
#include "Azer.h" #include <bits/stdc++.h> namespace { using namespace std; template <typename T> using min_heap = priority_queue<T, vector<T>, less<T>>; #define bit(n, i) (((n) >> (i)) & 1) mt19937 rng(42); int n; vector<vector<pair<int, int>>> g; int last = 0; vector<bool> b; vector<int> dist; set<pair<int, int>> pq; int state, ptr, curr; int delta, delta_v; const int X = 0; void recalc(int v) { for (auto [u, w] : g[v]) { if (dist[u] == -1 || dist[u] > dist[v] + w) { auto it = pq.find({dist[u], u}); if (it != pq.end()) { pq.erase(it); } dist[u] = dist[v] + w; pq.insert({dist[u], u}); } } } void process() { int delta1 = 0; if (pq.empty()) { delta1 = 501; } else { auto [dist_v, v] = *pq.begin(); delta1 = dist_v - last; } for (int i = 0; i < 9; i++) { SendA(bit(delta1, i)); } state = 1; ptr = 0; delta = 0; delta_v = 0; } } void InitA(int N, int A, vector<int> U, vector<int> V, vector<int> C) { n = N; g.resize(n); for (int i = 0; i < A; i++) { g[U[i]].push_back({V[i], C[i]}); g[V[i]].push_back({U[i], C[i]}); } dist.assign(n, -1); dist[0] = 0; b.resize(n); for (int i = 0; i < n; i++) { b[i] = rng() % 2; } recalc(0); curr = 1; if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } void ReceiveA(bool x) { if (state == 0) { if (x) { delta += 1 << ptr; } ptr++; if (ptr == 9) { int delta1 = 0, v; if (pq.empty()) { delta1 = 501; v = 0; } else { auto [dist_v, v1] = *pq.begin(); delta1 = dist_v - last; v = v1; } if (delta1 < delta) { SendA(true); for (int i = 0; i < 9; i++) { SendA(bit(delta1, i)); } for (int i = 0; i < 11; i++) { SendA(bit(v, i)); } recalc(v); pq.erase({dist[v], v}); last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } else { SendA(false); state = 2; delta_v = 0; ptr = 0; } } } else if (state == 1) { if (ptr == 0) { if (x == 0) { auto [dist_v, v] = *pq.begin(); recalc(v); pq.erase(pq.begin()); for (int i = 0; i < 11; i++) { SendA(bit(v, i)); } last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } else { ptr++; } } else if (ptr <= 9) { if (x == 1) { delta += 1 << (ptr - 1); } ptr++; } else if (ptr <= 20) { if (x == 1) { delta_v += 1 << (ptr - 10); } ptr++; if (ptr == 21) { int v = delta_v; auto it = pq.find({dist[v], v}); if (it != pq.end()) { pq.erase(it); } dist[v] = last + delta; recalc(v); last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } } } else { if (x) { delta_v += 1 << ptr; } ptr++; if (ptr == 11) { int v = delta_v; auto it = pq.find({dist[v], v}); if (it != pq.end()) { pq.erase(it); } dist[v] = last + delta; recalc(v); last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } } } vector<int> Answer() { return dist; }
#include "Baijan.h" #include <bits/stdc++.h> namespace { using namespace std; template <typename T> using min_heap = priority_queue<T, vector<T>, less<T>>; #define bit(n, i) (((n) >> (i)) & 1) mt19937 rng(42); int n; vector<vector<pair<int, int>>> g; int last = 0; vector<bool> b; vector<int> dist; set<pair<int, int>> pq; int state, ptr, curr; int delta, delta_v; const int X = 1; void recalc(int v) { for (auto [u, w] : g[v]) { if (dist[u] == -1 || dist[u] > dist[v] + w) { auto it = pq.find({dist[u], u}); if (it != pq.end()) { pq.erase(it); } dist[u] = dist[v] + w; pq.insert({dist[u], u}); } } } void process() { int delta1 = 0; if (pq.empty()) { delta1 = 501; } else { auto [dist_v, v] = *pq.begin(); delta1 = dist_v - last; } for (int i = 0; i < 9; i++) { SendB(bit(delta1, i)); } state = 1; ptr = 0; delta = 0; delta_v = 0; } } void InitB(int N, int A, vector<int> U, vector<int> V, vector<int> C) { n = N; g.resize(n); for (int i = 0; i < A; i++) { g[U[i]].push_back({V[i], C[i]}); g[V[i]].push_back({U[i], C[i]}); } dist.assign(n, -1); dist[0] = 0; b.resize(n); for (int i = 0; i < n; i++) { b[i] = rng() % 2; } recalc(0); curr = 1; if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } void ReceiveB(bool x) { if (state == 0) { if (x) { delta += 1 << ptr; } ptr++; if (ptr == 9) { int delta1 = 0, v; if (pq.empty()) { delta1 = 501; v = 0; } else { auto [dist_v, v1] = *pq.begin(); delta1 = dist_v - last; v = v1; } if (delta1 < delta) { SendB(true); for (int i = 0; i < 9; i++) { SendB(bit(delta1, i)); } for (int i = 0; i < 11; i++) { SendB(bit(v, i)); } recalc(v); pq.erase({dist[v], v}); last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } else { SendB(false); state = 2; delta_v = 0; ptr = 0; } } } else if (state == 1) { if (ptr == 0) { if (x == 0) { auto [dist_v, v] = *pq.begin(); recalc(v); pq.erase(pq.begin()); for (int i = 0; i < 11; i++) { SendB(bit(v, i)); } last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } else { ptr++; } } else if (ptr <= 9) { if (x == 1) { delta += 1 << (ptr - 1); } ptr++; } else if (ptr <= 20) { if (x == 1) { delta_v += 1 << (ptr - 10); } ptr++; if (ptr == 21) { int v = delta_v; auto it = pq.find({dist[v], v}); if (it != pq.end()) { pq.erase(it); } dist[v] = last + delta; recalc(v); last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 0; } } } } else { if (x) { delta_v += 1 << ptr; } ptr++; if (ptr == 11) { int v = delta_v; auto it = pq.find({dist[v], v}); if (it != pq.end()) { pq.erase(it); } dist[v] = last + delta; recalc(v); last = dist[v]; curr++; if (curr == n) { } else if (b[curr] == X) { process(); } else { state = 0; delta = 0; ptr = 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...