This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Azer.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
constexpr int INF = 1e8;
vector<vector<pair<int,int>>> ad;
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
vector<int> vis;
vector<int> dist;
void add_pq(int v, int d){
    //cerr << "Azer: " << v << " " << d << endl;
    for(auto [u, w]: ad[v]){
        if(d + w < dist[u]){
            pq.emplace(d+w, u);
        }
    }
}
int N;
bool receive_type; // 0 for distance, 1 for node index
int counter, count_vis;
int received_node, received_dist;
int curr_node, curr_dist;
int last_dist;
void find_next(){
    last_dist = min(curr_dist, received_dist);
    while(pq.size() and vis[pq.top().second]) pq.pop();
    if(pq.size()) curr_dist = pq.top().first, curr_node = pq.top().second;
    else curr_dist = last_dist+501, curr_node = 0;
    received_node = 0;
    received_dist = last_dist;
    for(int i=0; i<9; i++) SendA((1 << i) & (curr_dist - last_dist));
}
void visit(int v, int d){
    dist[v] = d; vis[v] = 1; count_vis++;
    add_pq(v, d);
    if(count_vis < N) find_next();
}
}  // namespace
void InitA(int N, int A, std::vector<int> U, std::vector<int> V, std::vector<int> C) {
    ::N = N;
    ad.resize(N), vis.resize(N), dist.resize(N, INF);
    for(int i=0; i<A; i++){
        ad[U[i]].push_back({V[i], C[i]});
        ad[V[i]].push_back({U[i], C[i]});
    }
    
    dist[0] = 0;
    pq.emplace(0, 0);
    find_next();
}
void ReceiveA(bool x) {
    if(receive_type == 0){
        received_dist += int(x) << counter;
        counter++;
        if(counter == 9){
            if(curr_dist <= received_dist){ 
                for(int i=0; i<11; i++) SendA((1 << i) & curr_node);
                pq.pop();
                visit(curr_node, curr_dist);
            }
            else{
                receive_type = 1;
            }
            counter = 0;
        }
    }
    else{
        received_node += int(x) << counter;
        counter++;
        if(counter == 11){
            visit(received_node, received_dist);
            receive_type = 0;
            counter = 0;
        }
    }
}
std::vector<int> Answer() {
    return dist;
}
#include "Baijan.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
constexpr int INF = 1e8;
vector<vector<pair<int,int>>> ad;
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
vector<int> vis;
vector<int> dist;
void add_pq(int v, int d){
    //cerr << "Baijan: " << v << " " << d << endl;
    for(auto [u, w]: ad[v]){
        if(d + w < dist[u]){
            pq.emplace(d+w, u);
        }
    }
}
int N;
bool receive_type; // 0 for distance, 1 for node index
int counter, count_vis;
int received_node, received_dist;
int curr_node, curr_dist;
int last_dist;
void find_next(){
    last_dist = min(curr_dist, received_dist);
    while(pq.size() and vis[pq.top().second]) pq.pop();
    if(pq.size()) curr_dist = pq.top().first, curr_node = pq.top().second;
    else curr_dist = last_dist+501, curr_node = 0;
    received_node = 0;
    received_dist = last_dist;
    for(int i=0; i<9; i++) SendB((1 << i) & (curr_dist - last_dist));
}
void visit(int v, int d){
    dist[v] = d; vis[v] = 1; count_vis++;
    add_pq(v, d);
    if(count_vis < N) find_next();
}
}  // namespace
void InitB(int N, int B, std::vector<int> S, std::vector<int> T, std::vector<int> D) {
    ::N = N;
    ad.resize(N), vis.resize(N), dist.resize(N, INF);
    for(int i=0; i<B; i++){
        ad[S[i]].push_back({T[i], D[i]});
        ad[T[i]].push_back({S[i], D[i]});
    }
    
    dist[0] = 0;
    pq.emplace(0, 0);
    find_next();
}
void ReceiveB(bool y) {
    if(receive_type == 0){
        received_dist += int(y) << counter;
        counter++;
        if(counter == 9){
            if(curr_dist < received_dist){ 
                for(int i=0; i<11; i++) SendB((1 << i) & curr_node);
                pq.pop();
                visit(curr_node, curr_dist);
            }
            else{
                receive_type = 1;
            }
            counter = 0;
        }
    }
    else{
        received_node += int(y) << counter;
        counter++;
        if(counter == 11){
            visit(received_node, received_dist);
            receive_type = 0;
            counter = 0;
        }
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |