제출 #1176321

#제출 시각아이디문제언어결과실행 시간메모리
1176321avighnaTwo Transportations (JOI19_transportations)C++20
16 / 100
147 ms27528 KiB
#include "Azer.h"
#include <algorithm>
#include <queue>
#include <string>
#include <vector>

namespace {

std::string s;
int s_idx = 0;
std::vector<int> ans;
std::vector<std::vector<std::pair<int, int>>> adj;
int n;

} // namespace

void InitA(int N, int A, std::vector<int> U, std::vector<int> V,
           std::vector<int> C) {
  n = N;
  adj = std::vector<std::vector<std::pair<int, int>>>(N);
  for (int i = 0; i < A; ++i) {
    adj[U[i]].push_back({V[i], C[i]});
    adj[V[i]].push_back({U[i], C[i]});
  }
}

void ReceiveA(bool x) { s.push_back(x + '0'); }

std::vector<int> Answer() {
  for (int i = 0; i < n; ++i) {
    if (s[s_idx++] == '0') {
      continue;
    }
    while (true) {
      if (s[s_idx++] == '0') {
        break;
      }
      int v = 0, w = 0;
      for (int i = 0; i < 12; ++i) {
        v += (s[s_idx++] - '0') * (1 << i);
      }
      for (int i = 0; i < 10; ++i) {
        w += (s[s_idx++] - '0') * (1 << i);
      }
      adj[i].push_back({v, w});
      adj[v].push_back({i, w});
    }
  }
  ans = std::vector<int>(n, (1 << 30) - 1);
  ans[0] = 0;
  std::priority_queue<std::pair<int, int>> pq;
  pq.push({0, 0});
  std::vector<bool> vis(n);
  while (!pq.empty()) {
    auto [dist, node] = pq.top();
    dist = -dist;
    pq.pop();
    if (vis[node]) {
      continue;
    }
    vis[node] = true;
    for (auto &[i, wt] : adj[node]) {
      if (dist + wt < ans[i]) {
        ans[i] = dist + wt;
        pq.push({-ans[i], i});
      }
    }
  }
  return ans;
}
#include "Baijan.h"
#include <queue>
#include <vector>

void InitB(int N, int B, std::vector<int> S, std::vector<int> T,
           std::vector<int> D) {
  std::vector<std::vector<std::pair<int, int>>> adj(N);
  for (int i = 0; i < B; ++i) {
    adj[std::min(S[i], T[i])].push_back({std::max(S[i], T[i]), D[i]});
  }
  for (int i = 0; i < N; ++i) {
    if (adj[i].empty()) {
      SendB(false);
      continue;
    }
    SendB(true);
    for (auto &[v, w] : adj[i]) {
      SendB(true);
      for (int i = 0; i < 12; ++i) {
        SendB(!!(v & (1 << i)));
      }
      for (int i = 0; i < 10; ++i) {
        SendB(!!(w & (1 << i)));
      }
    }
    SendB(false);
  }
}

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