Submission #1354434

#TimeUsernameProblemLanguageResultExecution timeMemory
1354434Jawad_Akbar_JJTwo Transportations (JOI19_transportations)C++20
Compilation error
0 ms0 KiB
#include <iostream>
#include <vector>
#include <set>
#include "Azer.h"
#include "Baijan.h"

using namespace std;
const int M = 1<<12;
vector<pair<int, int>> nei[M];
vector<int> v1, v2, v3, inp, Final;
int N, A, type, inpS, sz, K, num;

void Asends(int val){
	for (int i=10;i+1;i--){
		SendA(!!(val & (1<<i)));
	}
}

void InitA(int n, int a, vector<int> u, vector<int> v, vector<int> c){
	N = n,A = a;
	v1 = u, v2 = v, v3 = c;


	if (A <= 300){
		type = 1;
		Asends(1);
		Asends(A * 3);
		for (int i=0;i<A;i++)
			Asends(u[i]), Asends(v[i]), Asends(c[i]);
	}
	else{
		type = 2;
		Asends(2);
		Asends(0);
	}

}

vector<int> dikstra(){
	vector<int> Ans(N, 1e9);
	Ans[0] = 0;

	set<pair<int, int>> st = {{0, 0}};
	while (st.size() > 0){
		auto [mn, u] = *begin(st);
		st.erase(begin(st));

		if (mn != Ans[u])
			continue;
		for (auto [i, w] : nei[u]){
			if (Ans[i] > Ans[u] + w){
				Ans[i] = Ans[u] + w;
				st.insert({Ans[i], i});
			}
		}
	}
	return Ans;
}

void prepareAns(){
	if (type == 1){
		for (int i=0;i<N+N;i+=2)
			Final.push_back((inp[i]<<11) + inp[i+1]);
		return;
	}
	for (int i=0;i<A;i++){
		nei[v1[i]].push_back({v2[i], v3[i]});
		nei[v2[i]].push_back({v1[i], v3[i]});
	}
	for (int i=0;i<inpS;i+=3){
		nei[inp[i]].push_back({inp[i+1], inp[i+2]});
		nei[inp[i+1]].push_back({inp[i], inp[i+2]});
	}

	Final = dikstra();
}


void ReceiveA(bool b){
	num = num * 2 + b, sz++;
	if (sz == 11){
		K++;
		if (K == 1)
			inpS = num;
		if (K > 1)
			inp.push_back(num);
		num = 0, sz = 0;

		if (K >= 1 and K == inpS + 1)
			prepareAns();
	}
}

vector<int> Ans(){
	return Final;
}
#include <iostream>
#include <vector>
#include <set>
#include "Azer.h"
#include "Baijan.h"


using namespace std;
const int M = 1<<12;
vector<pair<int, int>> nei[M];
vector<int> v1, v2, v3, inp, Final;
int N, B, type, inpS, sz, K, num;

void Bsends(int val){
	for (int i=10;i+1;i--){
		SendB(!!(val & (1<<i)));
	}
}

void InitB(int n, int b, vector<int> u, vector<int> v, vector<int> c){
	N = n, B = b;
	v1 = u, v2 = v, v3 = c;
}

vector<int> dikstra(){
	vector<int> Ans(N, 1e9);
	Ans[0] = 0;

	set<pair<int, int>> st = {{0, 0}};
	while (st.size() > 0){
		auto [mn, u] = *begin(st);
		st.erase(begin(st));

		if (mn != Ans[u])
			continue;
		for (auto [i, w] : nei[u]){
			if (Ans[i] > Ans[u] + w){
				Ans[i] = Ans[u] + w;
				st.insert({Ans[i], i});
			}
		}
	}
	return Ans;
}

void prepareAns(){
	if (type == 2){
		Bsends(B * 3);
		for (int i=0;i<B;i++)
			Bsends(v1[i]), Bsends(v2[i]), Bsends(v3[i]);
		return;
	}
	for (int i=0;i<B;i++){
		nei[v1[i]].push_back({v2[i], v3[i]});
		nei[v2[i]].push_back({v1[i], v3[i]});
	}
	for (int i=0;i<inpS;i+=3){
		nei[inp[i]].push_back({inp[i+1], inp[i+2]});
		nei[inp[i+1]].push_back({inp[i], inp[i+2]});
	}

	vector<int> Ans = dikstra();
	
	Bsends(N * 2);
	for (int i : Ans){
		Bsends((4192256 & i)>>11);
		Bsends(2047 & i);
	}
	return;
}

void ReceiveB(bool b){
	num = num * 2 + b, sz++;
	if (sz == 11){
		K++;
		if (K == 1){
			type = num;
		}
		if (K == 2)
			inpS = num;
		if (K > 2)
			inp.push_back(num);
		num = 0, sz = 0;

		if (K >= 2 and K == inpS + 2)
			prepareAns();
	}
}

Compilation message (stderr)

# 1번째 컴파일 단계

/usr/bin/ld: /tmp/ccvrsa9a.o: in function `main':
grader_azer.cpp:(.text.startup+0x285): undefined reference to `Answer()'
collect2: error: ld returned 1 exit status