Submission #1350587

#TimeUsernameProblemLanguageResultExecution timeMemory
1350587StefanSebezTwo Transportations (JOI19_transportations)C++20
100 / 100
256 ms48844 KiB
#include "Azer.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
namespace{
const int N=2010,inf=1e9;
int n;
vector<pair<int,int>>E[N];
int dist[N];bool was[N];
int lastdist,cnt,D,U;
void dijkstra(int u){
	cerr<<"A: "<<u<<"\n";
	was[u]=true;
	for(auto [v,w]:E[u])dist[v]=min(dist[v],dist[u]+w);
	lastdist=dist[u];cnt=-1;D=0;U=0;
}
int u,d;
void Senddist(){
	u=-1,d=inf;
	for(int i=0;i<n;i++)if(!was[i]&&d>=dist[i]){
		d=dist[i];
		u=i;
	}
	if(u==-1)return;
	cerr<<"A sends "<<u<<"\n";
	d-=lastdist;
	d=min(d,(1<<9)-1);
	for(int i=0;i<9;i++)SendA(d>>i&1);
}
}
void InitA(int n,int m,vector<int>u,vector<int>v,vector<int>w){
	::n=n;
	for(int i=0;i<m;i++){
		E[u[i]].pb({v[i],w[i]});
		E[v[i]].pb({u[i],w[i]});
	}
	for(int i=1;i<n;i++)dist[i]=inf;
	dijkstra(0);
	Senddist();
}

void ReceiveA(bool x){
	cnt++;
	if(cnt<9){
		if(x)D+=1<<cnt;
		if(cnt==8){
			if(d<=D){
				for(int i=0;i<11;i++)SendA(u>>i&1);
				dijkstra(u);
				Senddist();
			}
		}
	}
	else{
		if(x)U+=1<<(cnt-9);
		if(cnt==19){
			dist[U]=lastdist+D;
			dijkstra(U);
			Senddist();
		}
	}
}

vector<int>Answer(){
	vector<int>res;
	for(int i=0;i<n;i++)res.pb(dist[i]);
	return res;
}
#include "Baijan.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
namespace{
const int N=2010,inf=1e9;
int n;
vector<pair<int,int>>E[N];
int dist[N];bool was[N];
int lastdist,cnt,D,U;
void dijkstra(int u){
	cerr<<"B: "<<u<<"\n";
	was[u]=true;
	for(auto [v,w]:E[u])dist[v]=min(dist[v],dist[u]+w);
	lastdist=dist[u];cnt=-1;D=0;U=0;
}
int u,d;
void Senddist(){
	u=-1,d=inf;
	for(int i=0;i<n;i++)if(!was[i]&&d>=dist[i]){
		d=dist[i];
		u=i;
	}
	if(u==-1)return;
	cerr<<"B sends "<<u<<"\n";
	d-=lastdist;
	d=min(d,(1<<9)-1);
	for(int i=0;i<9;i++)SendB(d>>i&1);
}
}
void InitB(int n,int m,vector<int>u,vector<int>v,vector<int>w){
	::n=n;
	for(int i=0;i<m;i++){
		E[u[i]].pb({v[i],w[i]});
		E[v[i]].pb({u[i],w[i]});
	}
	for(int i=1;i<n;i++)dist[i]=inf;
	dijkstra(0);
	Senddist();
}

void ReceiveB(bool x){
	cnt++;
	if(cnt<9){
		if(x)D+=1<<cnt;
		if(cnt==8){
			if(d<D){
				for(int i=0;i<11;i++)SendB(u>>i&1);
				dijkstra(u);
				Senddist();
			}
		}
	}
	else{
		if(x)U+=1<<(cnt-9);
		if(cnt==19){
			dist[U]=lastdist+D;
			dijkstra(U);
			Senddist();
		}
	}
}
#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...