제출 #1157040

#제출 시각아이디문제언어결과실행 시간메모리
1157040irmuunTwo Transportations (JOI19_transportations)C++20
0 / 100
104 ms960 KiB
#include "Azer.h"
#include <vector>
#include <bits/stdc++.h>

namespace {

int N;
int variable_example[500000];
int cnt;

}  // namespace

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define pii pair<int,int>

const int maxq=58000,maxn=2000,inf=1e9;

int cur=0,tot=0,pos=0,S=-1;
bool in[maxq];
int dist[maxn];

vector<pii>adj[maxn];

void calc(){
    fill(dist,dist+maxn,inf);
    priority_queue<pii,vector<pii>,greater<pii>>pq;
    pq.push({0,0});
    dist[0]=0;
    while(!pq.empty()){
        auto [d,i]=pq.top();
        pq.pop();
        if(dist[i]!=d) continue;
        for(auto [j,w]:adj[i]){
            if(dist[i]+w<dist[j]){
                dist[j]=dist[i]+w;
                pq.push({dist[j],j});
            }
        }
    }
}

void InitA(int N, int A, vector<int> U, vector<int> V,vector<int> C) {
    ::N = N;
    for(int i=0;i<A;i++){
        adj[U[i]].pb({V[i],C[i]});
        adj[V[i]].pb({U[i],C[i]});
        // cerr<<"A : "<<U[i]<<' '<<V[i]<<' '<<C[i]<<"\n";
    }
    for(int i=0;i<N;i++){
        S++;
        SendA(true);//increase counter
    }
}

void ReceiveA(bool x) {
    in[cnt++]=x;
    if(cnt%21==0){//full info
        int T=0,D=0;
        for(int j=0;j<12;j++){
            T+=(in[pos+j]?(1<<j):0);
        }
        pos+=12;
        for(int j=0;j<9;j++){
            D+=(in[pos+j]?(1<<j):0);
        }
        pos+=9;
        adj[S].pb({T,D});
        adj[T].pb({S,D});
    }
    // cerr<<"in "<<x<<' '<<cnt<<"\n";
}

vector<int>Answer(){
    calc();
    vector<int>ans(N);
    for(int i=0;i<N;i++){
        ans[i]=dist[i];
    }
    return ans;
}
#include "Baijan.h"
#include <vector>
#include <bits/stdc++.h>

using namespace std;

namespace {

int N,B;
int cnt;

vector<int>S,T,D;

}  // namespace

int node=-1;

void send_number(int x,int bit){
    for(int i=0;i<bit;i++){
        SendB(x&(1<<i)?true:false);
    }
}

void run(){//return all adjacent
    for(int i=0;i<B;i++){
        if(S[i]==node){
            send_number(T[i],12);
            send_number(D[i],9);
            continue;
        }
        if(T[i]==node){
            send_number(S[i],12);
            send_number(D[i],9);
            continue;
        }
    }
}

void InitB(int N, int B, vector<int> S, vector<int> T, vector<int> D) {
    ::N = N;
    ::B = B;
    ::S = S;
    ::T = T;
    ::D = D;
}

void ReceiveB(bool y) {
    node++;
    run();
}
#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...