#include <bits/stdc++.h>
#include "Azer.h"
using namespace std;
typedef long long int ll;
namespace {
int n;
vector<pair<int,int>> graf[2009];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> djikstra;
int poprz=0;
int dst[2009];
int wczyt=0,ter=0;
pair<int,int> cel;
int nr=0;
bool apuste=0,bpuste=0;
void napisz(int x){
for (int i=0;i<11;i++) SendA(x & (1<<i));
}
void nast(int v, int d){
//if (nr<10) cout << "A:" << v << ' ' << d << '\n';
if (dst[v] < d){
poprz = d;
while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()){
apuste = 1;
napisz((1<<11)-1);
napisz(1);
nr++;
return;
}
else apuste=0;
napisz(djikstra.top().first-poprz);
napisz(djikstra.top().second);
nr++;
return;
}
dst[v] = d;
poprz = d;
for (pair<int,int> x:graf[v]){
if (dst[x.first] > d+x.second){
dst[x.first] = d+x.second;
djikstra.push({dst[x.first],x.first});
}
}
while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()){
apuste = 1;
napisz((1<<11)-1);
napisz(1);
nr++;
return;
//if (nr<10) cout << "A empty\n";
}
else apuste=0;
//if (nr<10) cout << "A->B " << djikstra.top().first-poprz << ' ' << djikstra.top().second << '\n';
napisz(djikstra.top().first-poprz);
napisz(djikstra.top().second);
nr++;
}
} // namespace
void InitA(int N, int A, vector<int> U, vector<int> V,
vector<int> C) {
n = N;
for (int x=0;x<A;x++){
graf[U[x]].push_back({V[x],C[x]});
graf[V[x]].push_back({U[x],C[x]});
}
for (int x=0;x<=n;x++) dst[x] = 1e9+9;
nast(0,0);
cel = {-1,-1};
}
void ReceiveA(bool x) {
wczyt += (1<<ter) * x;
ter++;
if (ter==11){
if (cel.second == -1){
cel.second = wczyt + poprz;
if (wczyt == (1<<11)-1) bpuste=1;
else bpuste = 0;
}
else{
cel.first = wczyt;
//if (nr<10) cout << "A ma:" << djikstra.top().first << ' ' << cel.second << '\n';
//if (nr<10) cout << "A dostalo: " << cel.first << ' ' << cel.second << '\n';
//if (nr<10) cout << "A twierdzi o empt: " << apuste << ' ' << bpuste << '\n';
if (nr>n) return;
if (apuste && bpuste) return;
if (!apuste && (djikstra.top().first < cel.second || bpuste)){
cel.second = djikstra.top().first;
cel.first = djikstra.top().second;
djikstra.pop();
//if (nr<10) cout << "hi\n";
}
nast(cel.first,cel.second);
cel = {-1,-1};
}
ter = 0;
wczyt = 0;
}
}
vector<int> Answer() {
vector<int> odp;
for (int x=0;x<n;x++) odp.push_back(dst[x]);
return odp;
}
#include "Baijan.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
namespace {
int n;
vector<pair<int,int>> graf[2009];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> djikstra;
int poprz=0;
int dst[2009];
int wczyt=0,ter=0;
pair<int,int> cel;
pair<int,int> wczes;
int nr=0;
bool apuste=0,bpuste=0;
void napisz(int x){
for (int i=0;i<11;i++) SendB(x & (1<<i));
}
void nast(int v, int d){
if (dst[v]<d){
poprz = d;
while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()){
bpuste = 1;
napisz((1<<11)-1);
napisz(1);
nr++;
//if (nr<10) cout << "B empty\n";
return;
}
else bpuste=0;
//if (nr<10) cout << "B->A " << djikstra.top().first-poprz << ' ' << djikstra.top().second << '\n';
napisz(djikstra.top().first-poprz);
napisz(djikstra.top().second);
nr++;
return;
}
//if (nr<10) cout << "B:" << v << ' ' << d << '\n';
dst[v] = d;
poprz = d;
//if (nr<10) cout << "lelum " << poprz << ' ' << d << '\n';
for (pair<int,int> x:graf[v]){
if (dst[x.first] > d+x.second){
dst[x.first] = d+x.second;
djikstra.push({dst[x.first],x.first});
}
}
while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()){
bpuste = 1;
napisz((1<<11)-1);
napisz(1);
nr++;
//if (nr<10) cout << "B empty\n";
return;
}
else bpuste=0;
//if (nr<10) cout << "B->A " << djikstra.top().first-poprz << ' ' << djikstra.top().second << '\n';
napisz(djikstra.top().first-poprz);
napisz(djikstra.top().second);
nr++;
}
} // namespace
void InitB(int N, int B, vector<int> S, vector<int> T,
vector<int> D) {
n = N;
for (int x=0;x<B;x++){
graf[T[x]].push_back({S[x],D[x]});
graf[S[x]].push_back({T[x],D[x]});
}
for (int x=0;x<=n;x++) dst[x] = 1e9+9;
cel = {-1,-1};
wczes = {0,0};
}
void ReceiveB(bool y) {
wczyt += (1<<ter) * y;
ter++;
if (ter==11){
if (cel.second == -1){
cel.second = wczyt;
if (cel.second == (1<<11)-1) apuste=1;
else apuste=0;
}
else{
if (nr>n) return;
//if (nr<10) cout << "B jestem debilem: " << poprz << '\n';
nast(wczes.first,wczes.second);
cel.second += poprz;
cel.first = wczyt;
//if (nr<10) cout << "B dostalo: " << cel.first << ' ' << cel.second << '\n';
//if (nr<10) cout << "nr 2: " << apuste << ' ' << bpuste << '\n';
if (apuste && bpuste) return;
if (!bpuste && (djikstra.top().first < cel.second || apuste)){
cel.second = djikstra.top().first;
cel.first = djikstra.top().second;
djikstra.pop();
}
wczes = cel;
cel = {-1,-1};
}
ter = 0;
wczyt = 0;
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
244 ms |
332 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
656 KB |
Output is correct |
2 |
Runtime error |
227 ms |
416 KB |
Execution killed with signal 13 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
228 ms |
400 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
260 ms |
684 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
260 ms |
684 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
260 ms |
684 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
244 ms |
332 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |