제출 #1157149

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

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define pii pair<int,int>

namespace {

int N;
int cnt;

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

bool stop=true;

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

vector<pii>adj[maxn];

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

priority_queue<pii,vector<pii>,greater<pii>>pq;

void find_next(){
    stop=false;
    if(pq.empty()) return;
    while(!pq.empty()){
        auto [d,i]=pq.top();
        pq.pop();
        if(dist[i]!=d){
            continue;
        }
        for(auto [w,j]:adj[i]){
            if(dist[i]+w<dist[j]){
                dist[j]=dist[i]+w;
                pq.push({dist[j],j});
            }
        }
        if(i!=last){
            cerr<<"sendA : "<<i<<' '<<d<<endl;
            send_number(i,11);
            send_number(d,20);
        }
    }
    stop=true;
}

}  // namespace

void InitA(int N, int A, vector<int> U, vector<int> V,vector<int> C) {
    ::N = N;
    fill(dist,dist+N,inf);
    dist[0]=0;
    pq.push({0,0});
    for(int i=0;i<A;i++){
        adj[U[i]].pb({C[i],V[i]});
        adj[V[i]].pb({C[i],U[i]});
        // cerr<<"A : "<<U[i]<<' '<<V[i]<<' '<<C[i]<<"\n";
    }
    for(int i=0;i<N;i++){
        sort(all(adj[i]));
    }
    find_next();
}

void ReceiveA(bool x) {
    in[cnt++]=x;
    if(cnt%31==0){//full
        int node=0,val=0;
        for(int i=0;i<11;i++){
            node+=(in[pos+i]?(1<<i):0);
        }
        pos+=11;
        for(int i=0;i<20;i++){
            val+=(in[pos+i]?(1<<i):0);
        }
        cerr<<"In A : "<<node<<' '<<val<<endl;
        pos+=20;
        if(val<dist[node]){
            dist[node]=val;
            pq.push({val,node});
        }
        last=node;
        if(stop==true){
            find_next();
        }
    }
}

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

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define pii pair<int,int>

namespace {

int N;
int cnt;

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

bool stop=true;

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

vector<pii>adj[maxn];

int node=-1;

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

priority_queue<pii,vector<pii>,greater<pii>>pq;

void find_next(){
    stop=false;
    if(pq.empty()) return;
    while(!pq.empty()){
        auto [d,i]=pq.top();
        pq.pop();
        if(dist[i]!=d){
            continue;
        }
        for(auto [w,j]:adj[i]){
            if(dist[i]+w<dist[j]){
                dist[j]=dist[i]+w;
                pq.push({dist[j],j});
            }
        }
        if(i!=last){
            cerr<<"sendB : "<<i<<' '<<d<<endl;
            send_number(i,11);
            send_number(d,20);
        }
    }
    stop=true;
}

}  // namespace

void InitB(int N, int B, vector<int> S, vector<int> T, vector<int> D) {
    ::N = N;
    fill(dist,dist+N,inf);
    for(int i=0;i<B;i++){
        adj[S[i]].pb({D[i],T[i]});
        adj[T[i]].pb({D[i],S[i]});
    }
    for(int i=0;i<N;i++){
        sort(all(adj[i]));
    }
}

void ReceiveB(bool y) {
    in[cnt++]=y;
    if(cnt%31==0){//full
        int node=0,val=0;
        for(int i=0;i<11;i++){
            node+=(in[pos+i]?(1<<i):0);
        }
        pos+=11;
        for(int i=0;i<20;i++){
            val+=(in[pos+i]?(1<<i):0);
        }
        pos+=20;
        cerr<<"In B : "<<node<<' '<<val<<endl;
        if(val<dist[node]){
            dist[node]=val;
            pq.push({val,node});
        }
        last=node;
        if(stop==true){
            find_next();
        }
    }
}
#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...