#include "Azer.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
int N;
bool used[2100];
int d[2100];
int cont = 0;
int big = 0;
int it = 0;
int v = 0;
int inf = 1e9;
vector<pair<int,int>> adjlst[2100];
void pack(int v, int n){
for(int i = 0; i < n; i++){
SendA((v&(1<<i))>0);
}
}
} // namespace
void InitA(int N, int A, std::vector<int> U, std::vector<int> V,
std::vector<int> C) {
::N = N;
for(int i = 0; i < A; i++){
adjlst[U[i]].push_back({V[i],C[i]});
adjlst[V[i]].push_back({U[i],C[i]});
}
for(int i = 0; i < N; i++){
used[i] = false;
d[i] = inf;
}
used[0] = true;
d[0] = 0;
pair<int,int> ii = {inf,-1};
for(int i = 0; i < N; i++) if(!used[i]) ii = min(ii,{d[i],i});
bool tell = true;
if(cont != 0 && ii.first > v + big){
ii = {v + big, it};
tell = false;
}
d[ii.second] = ii.first;
int package = ii.first - big;
big = ii.first;
int g = ii.second;
for(pair<int,int> ii1 : adjlst[g]){
d[ii1.first] = min(d[ii1.first],d[g] + ii1.second);
}
used[g] = true;
int num = big + 501;
for(int i = 0; i < N; i++) if(!used[i]) num = min(num,d[i]);
for(int i = 0; i < 9; i++){
SendA((num&(1<<i))>0);
}
if(tell){
for(int i = 0; i < 11; i++){
SendA((g&(1<<i))>0);
}
for(int i = 0; i < 9; i++){
SendA((package&(1<<i))>0);
}
}
}
void ReceiveA(bool x) {
if(cont == 0) if(!x) cont = 20;
if(cont < 12) if(x) it += (1<<(cont-1));
else if(x) v += (1<<(x-12));
if(cont == 20){
pair<int,int> ii = {inf,-1};
for(int i = 0; i < N; i++){
if(!used[i]) ii = min(ii,{d[i],i});
}
bool tell = true;
if(cont != 0 && ii.first > v + big){
ii = {v + big, it};
tell = false;
}
d[ii.second] = ii.first;
big = ii.first;
int g = ii.second;
for(pair<int,int> ii : adjlst[g]){
d[ii.first] = min(d[ii.first],d[g] + ii.second);
}
used[g] = true;
int num = big + 501;
for(int i = 0; i < N; i++) if(!used[i]) num = min(num,d[i]);
pack(num - big,9);
if(tell){
pack(g,11);
}
cont = 0;
it = 0;
v = 0;
return;
}
++cont;
}
std::vector<int> Answer() {
std::vector<int> ans(N);
for (int k = 0; k < N; ++k) {
ans[k] = d[k];
}
return ans;
}
#include "Baijan.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
int N;
bool used[2100];
int d[2100];
int cont = 0;
int big = 0;
int it = 0;
int v = 0;
int inf = 1e9;
vector<pair<int,int>> adjlst[2100];
bool pastuse;
int pastv;
void pack(int v, int n){
for(int i = 0; i < n; i++){
SendB((v&(1<<i))>0);
}
}
} // namespace
void InitB(int N, int B, std::vector<int> S, std::vector<int> T,
std::vector<int> D) {
::N = N;
cont = 0;
for(int i = 0; i < N; i++){
used[i] = false;
d[i] = inf;
}
pastuse = false;
pastv = 0;
}
void ReceiveB(bool y) {
if(cont < 9) if(y) v += (1<<cont);
if(cont < 20 && !pastuse) if(y) it += (1<<(cont-9));
if((cont == 8 && pastuse) || cont == 19){
if(!pastuse){
d[it] = pastv + big;
used[it] = true;
big = pastv + big;
}
pair<int,int> ii = {inf,-1};
for(int i = 0; i < N; i++){
if(!used[i]) ii = min(ii,{d[i],i});
}
if(ii.first < v + big){
pastuse = true;
SendB(true);
d[ii.second] = ii.first;
used[ii.second] = true;
pack(ii.second,11);
pack(ii.first - big,9);
big = ii.first;
}
else{
pastuse = false;
pastv = v;
SendB(false);
}
cont = 0;
it = 0;
v = 0;
}
cont++;
}
# | 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... |