제출 #245485

#제출 시각아이디문제언어결과실행 시간메모리
245485pavelTwo Transportations (JOI19_transportations)C++14
100 / 100
1914 ms113712 KiB
#include "Azer.h" #include <vector> #include <queue> #include <cstdio> using namespace std; typedef pair<int,int> ii; namespace { const int MAXN = 2003; int n; bool done[MAXN]; int dc=0; vector<int> solA; priority_queue<ii> e; vector<ii> graph[MAXN]; int pre=0; int idx=0; int cA, cB; int nA, nB; void add_node(int val, int node){ //printf("A add_node(%d %d)\n", val, node); pre = val; solA[node] = val; done[node] = true; dc++; for(auto i:graph[node]){ e.push(ii(-solA[node] + i.first, i.second)); } } void send_best(){ if(dc == n) return; cA = (1<<9)-1; nA = -1; while(!e.empty() && done[e.top().second]) e.pop(); if(!e.empty()){ cA = (-e.top().first) - pre; nA = e.top().second; } //printf("A send_best() -> %d\n", cA); for(int i=0;i<9;++i) SendA((1<<i) & cA); } } void InitA(int n, int a, vector<int> u, vector<int> v, vector<int> c) { ::n = n; solA.resize(n); for(int i=0;i<a;++i){ graph[u[i]].push_back(ii(-c[i], v[i])); graph[v[i]].push_back(ii(-c[i], u[i])); } add_node(0, 0); send_best(); } void ReceiveA(bool x) { if(idx<9){ cB |= ((int)x) << idx; idx++; if(idx == 9){ //printf("A recieved cB %d\n", cB); if(cB > cA){ add_node(pre + cA, nA); for(int i = 0; i < 11; i++){ SendA((1<<i) & nA); } idx = 0; cB = 0; nB = 0; send_best(); } } }else{ nB |= ((int)x) << (idx - 9); idx++; if(idx == 20){ //printf("A recieved nB %d\n", nB); add_node(pre + cB, nB); idx = 0; cB = 0; nB = 0; send_best(); } } } std::vector<int> Answer() { return vector<int>(solA); }
#include "Baijan.h" #include <vector> #include <queue> #include <cstdio> #ifdef EVAL #define dbg(x) ; #else #define dbg(x) //printf(x) #endif using namespace std; typedef pair<int,int> ii; namespace { const int MAXN = 2003; int n; bool done[MAXN]; int dc=0; vector<int> solB; priority_queue<ii> e; vector<ii> graph[MAXN]; int pre=0; int idx=0; int cA, cB; int nA, nB; void add_node(int val, int node){ //printf("B add_node(%d %d)\n", val, node); pre = val; solB[node] = val; done[node] = true; dc++; for(auto i:graph[node]){ e.push(ii(-solB[node] + i.first, i.second)); } } void send_best(){ if(dc == n) return; cB = (1<<9)-1; nB = -1; while(!e.empty() && done[e.top().second]) e.pop(); if(!e.empty()){ cB = (-e.top().first) - pre; nB = e.top().second; } //printf("B send_best() -> %d\n", cB); for(int i=0;i<9;++i) SendB((1<<i) & cB); } } void InitB(int n, int a, vector<int> u, vector<int> v, vector<int> c) { ::n = n; solB.resize(n); for(int i=0;i<a;++i){ graph[u[i]].push_back(ii(-c[i], v[i])); graph[v[i]].push_back(ii(-c[i], u[i])); } add_node(0, 0); } void ReceiveB(bool x) { if(idx<9){ cA |= ((int)x) << idx; idx++; if(idx == 9){ //printf("B recieved cA %d\n", cA); send_best(); if(cA >= cB){ add_node(pre + cB, nB); for(int i = 0; i < 11; i++){ SendB((1<<i) & nB); } idx = 0; cA = 0; nA = 0; } } }else{ nA |= ((int)x) << (idx - 9); idx++; if(idx == 20){ //printf("B recieved nA %d\n", nA); add_node(pre + cA, nA); idx = 0; cA = 0; nA = 0; } } }
#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...