# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
943698 | yeediot | Two Transportations (JOI19_transportations) | C++17 | 0 ms | 0 KiB |
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;
#define S second
#define F first
namespace {
const int mxn=5e5+5;
int cur=0,bit=0,n=0,cnt=0,prv=0,first=0;
vector<pair<int,int>>adj[mxn];
vector<int>dis;
vector<bool>vis;
pair<int,int>mn={(1<<9)-1,(1<<9)-1};
void send(int a,int b){
b--;
for(;b>=0;b--){
SendA(a>>b&1);
}
}
void gmn(){
dis[mn.S]=prv+mn.F;
prv=dis[mn.S];
cnt--;
vis[mn.S]=1;
for(auto [u,d]:adj[mn.S]){
dis[u]=min(dis[u],dis[mn.S]+d);
}
mn={(1<<9)-1,(1<<9)-1};
for(int i=0;i<n;i++){
if(vis[i])continue;
mn=min(mn,{dis[i]-prv,i});
}
if(cnt)send(mn.F,9);
}
void gdis(){
if(cur==(1<<9)-1){
send(mn.S,11);
gmn();
}
else{
mn.F=cur;
first=0;
}
cur=bit=0;
}
void gid(){
mn.S=cur;
gmn();
cur=bit=0;
first=1;
}
} // namespace
void InitA(int N, int A, std::vector<int> U, std::vector<int> V,std::vector<int> C) {
for(int i=0;i<A;i++){
adj[V[i]].push_back({U[i],C[i]});
adj[U[i]].push_back({V[i],C[i]});
}
n=N;
cnt=n;
first=1;
bit=0;
cur=0;
prv=0;
dis=vector<int>(N,1e9);
vis=vector<bool>(N,0);
dis[0]=0;
vis[0]=1;
cnt--;
int v=0;
for(auto [u,d]:adj[v]){
dis[u]=min(dis[u],dis[v]+d);
}
for(int i=0;i<n;i++){
if(vis[i])continue;
mn=min(mn,{dis[u],u});
}
send(mn.F,9);
}
void ReceiveA(bool x) {
cur=cur*2+x;
bit++;
if(bit==9 and first){
gdis();
}
else if(bit==11){
gid();
}
}
std::vector<int> Answer() {
return dis;
}
#include "Baijan.h"
#include<bits/stdc++.h>
using namespace std;
#define S second
#define F first
namespace {
const int mxn=5e5+5;
int cur=0,bit=0,n=0,cnt=0,prv=0,first=0;
vector<pair<int,int>>adj[mxn];
vector<int>dis;
vector<bool>vis;
pair<int,int>mn={(1<<9)-1,(1<<9)-1};
void send(int a,int b){
b--;
for(;b>=0;b--){
SendB(a>>b&1);
}
}
void gmn(){
dis[mn.S]=prv+mn.F;
prv=dis[mn.S];
vis[mn.S]=1;
for(auto [u,d]:adj[mn.S]){
dis[u]=min(dis[u],dis[mn.S]+d);
}
mn={(1<<9)-1,(1<<9)-1};
for(int i=0;i<n;i++){
if(vis[i])continue;
mn=min(mn,{dis[i]-prv,i});
}
}
void gdis(){
if(mn.F>cur){
mn.F=cur;
send((1<<9)-1,9);
first=0;
}
else{
send(mn.F,9);
send(mn.S,11);
gmn();
}
cur=bit=0;
}
void gid(){
mn.S=cur;
gmn();
cur=bit=0;
first=1;
}
} // namespace
void InitB(int N, int B, std::vector<int> U, std::vector<int> V,std::vector<int> C) {
for(int i=0;i<B;i++){
adj[V[i]].push_back({U[i],C[i]});
adj[U[i]].push_back({V[i],C[i]});
}
n=N;
first=1;
bit=0;
cur=0;
prv=0;
dis=vector<int>(N,1e9);
vis=vector<bool>(N,0);
dis[0]=0;
vis[0]=1;
int v=0;
for(auto [u,d]:adj[v]){
dis[u]=min(dis[u],dis[v]+d);
}
for(int i=0;i<n;i++){
if(vis[i])continue;
mn=min(mn,{dis[u],u});
}
}
void ReceiveB(bool x) {
cur=cur*2+x;
bit++;
if(bit==9 and first){
gdis();
}
else if(bit==11){
gid();
}
}