제출 #1157135

#제출 시각아이디문제언어결과실행 시간메모리
1157135irmuunTwo Transportations (JOI19_transportations)C++20
0 / 100
137 ms1172 KiB
#include "Azer.h" #include <vector> #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; 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(){ if(pq.empty()) return; while(!pq.empty()){ auto [d,i]=pq.top(); pq.pop(); if(dist[i]!=d&&i!=last){ 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){ send_number(i,11); send_number(d,20); return; } } return; } } // 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); } pos+=20; if(val<dist[node]){ dist[node]=val; pq.push({val,node}); } last=node; 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 <vector> #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; 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(){ if(pq.empty()) return; while(!pq.empty()){ auto [d,i]=pq.top(); pq.pop(); if(dist[i]!=d&&i!=last){ 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){ send_number(i,11); send_number(d,20); return; } } return; } } // 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; if(val<dist[node]){ dist[node]=val; pq.push({val,node}); } last=node; 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...