Submission #2889204


Source Code Expand

#include <queue>
#include <cstddef>
#include <utility>
#include <vector>
#include <limits>
#include <unordered_map>
#include <cassert>

namespace tools {
  template <typename T> class dijkstra {
  private:
    const std::size_t start_node;
    std::vector<T> distances;
    std::vector<std::size_t> prev_nodes;
    std::priority_queue<std::pair<T, std::size_t>, std::vector<std::pair<T, std::size_t>>, std::greater<std::pair<T, std::size_t>>> tasks;
    std::vector<std::unordered_map<std::size_t, T>> edges;

  public:
    static constexpr std::size_t NONE = std::numeric_limits<std::size_t>::max();

    dijkstra(const std::size_t node_count, const std::size_t start_node) :
      start_node(start_node),
      distances(node_count),
      prev_nodes(node_count),
      tasks(),
      edges(node_count) {
      assert(start_node < node_count);
    }

    void add_edge(const std::size_t from, const std::size_t to, const T distance) {
      this->edges[from].insert(std::make_pair(to, distance));
    }

    std::vector<T> calc() {
      this->distances.assign(this->distances.size(), std::numeric_limits<T>::max());
      this->prev_nodes.assign(this->prev_nodes.size(), std::size_t(NONE));
      this->tasks.push(std::make_pair(0, this->start_node));
      while (!this->tasks.empty()) {
        const std::pair<T, std::size_t> task = this->tasks.top();
        this->tasks.pop();
        const T& distance = std::get<0>(task);
        const std::size_t& target_node = std::get<1>(task);
        if (this->distances[target_node] != std::numeric_limits<T>::max()) {
          // old task for already visited node
          continue;
        }
        this->distances[target_node] = distance;
        for (const std::pair<std::size_t, T>& edge : this->edges[target_node]) {
          const std::size_t& next_node = std::get<0>(edge);
          const T new_distance = distance + std::get<1>(edge);
          if (new_distance < this->distances[next_node]) {
            this->prev_nodes[next_node] = target_node;
            this->tasks.push(std::make_pair(new_distance, next_node));
          }
        }
      }
      return this->distances;
    }
  };
}

#include <iostream>
#include <cstdint>
#include <algorithm>

int main() {
  std::uint64_t n, m, s, t;
  std::cin >> n >> m >> s >> t;
  tools::dijkstra<std::uint64_t> yen_dijkstra(n, s - 1);
  tools::dijkstra<std::uint64_t> snuuk_dijkstra(n, t - 1);
  std::uint64_t u, v, a, b;
  for (std::uint64_t i = 0; i < m; ++i) {
    std::cin >> u >> v >> a >> b;
    yen_dijkstra.add_edge(u - 1, v - 1, a);
    yen_dijkstra.add_edge(v - 1, u - 1, a);
    snuuk_dijkstra.add_edge(u - 1, v - 1, b);
    snuuk_dijkstra.add_edge(v - 1, u - 1, b);
  }
  std::vector<std::uint64_t> yen_costs = yen_dijkstra.calc();
  std::vector<std::uint64_t> snuuk_costs = snuuk_dijkstra.calc();
  std::vector<std::uint64_t> costs(n);
  for (std::uint64_t i = 0; i < n; ++i) {
    costs[i] = yen_costs[i] + snuuk_costs[i];
  }
  for (std::uint64_t i = 0; i < n; ++i) {
    std::cout << 1000000000000000 - *std::min_element(costs.begin(), costs.end()) << std::endl;
    costs[i] = std::numeric_limits<std::uint64_t>::max();
  }
  return 0;
}

Submission Info

Submission Time
Task D - Saving Snuuk
User anqooqie
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3257 Byte
Status TLE
Exec Time 2105 ms
Memory 39676 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 400
Status
AC × 2
AC × 23
TLE × 33
Set Name Test Cases
Sample sampleRnd.txt, sampleT.txt
All 00yorimichi.txt, 11_0.txt, 11_1.txt, 11_2.txt, 11_3.txt, 11_4.txt, 1n1m1.txt, 1oo_0.txt, 1oo_1.txt, 1oo_2.txt, 1oo_3.txt, 1oo_4.txt, dangou_0.txt, dangou_1.txt, dangou_2.txt, dangou_3.txt, dangou_4.txt, edge.txt, high_0.txt, high_1.txt, high_2.txt, high_3.txt, high_4.txt, low_0.txt, low_1.txt, low_2.txt, low_3.txt, low_4.txt, oo1_0.txt, oo1_1.txt, oo1_2.txt, oo1_3.txt, oo1_4.txt, path_0.txt, path_1.txt, path_2.txt, path_3.txt, path_4.txt, path_5.txt, rnd_0.txt, rnd_1.txt, rnd_2.txt, rnd_3.txt, rnd_4.txt, sampleRnd.txt, sampleT.txt, slast_0.txt, slast_1.txt, slast_2.txt, slast_3.txt, slast_4.txt, tlast_0.txt, tlast_1.txt, tlast_2.txt, tlast_3.txt, tlast_4.txt
Case Name Status Exec Time Memory
00yorimichi.txt TLE 2105 ms 38784 KB
11_0.txt TLE 2105 ms 30712 KB
11_1.txt AC 363 ms 22000 KB
11_2.txt AC 825 ms 23800 KB
11_3.txt TLE 2105 ms 37628 KB
11_4.txt TLE 2105 ms 33148 KB
1n1m1.txt TLE 2105 ms 31116 KB
1oo_0.txt TLE 2105 ms 29940 KB
1oo_1.txt TLE 2105 ms 30708 KB
1oo_2.txt AC 230 ms 20976 KB
1oo_3.txt TLE 2105 ms 31860 KB
1oo_4.txt TLE 2105 ms 30712 KB
dangou_0.txt AC 230 ms 17016 KB
dangou_1.txt AC 1022 ms 23416 KB
dangou_2.txt TLE 2105 ms 31224 KB
dangou_3.txt AC 166 ms 12536 KB
dangou_4.txt TLE 2105 ms 38648 KB
edge.txt TLE 2104 ms 38784 KB
high_0.txt AC 308 ms 15480 KB
high_1.txt AC 358 ms 20592 KB
high_2.txt TLE 2104 ms 37496 KB
high_3.txt AC 30 ms 3072 KB
high_4.txt TLE 2105 ms 27772 KB
low_0.txt AC 207 ms 20468 KB
low_1.txt AC 255 ms 22260 KB
low_2.txt TLE 2105 ms 32636 KB
low_3.txt TLE 2105 ms 30076 KB
low_4.txt AC 1610 ms 23156 KB
oo1_0.txt TLE 2105 ms 33528 KB
oo1_1.txt TLE 2105 ms 28276 KB
oo1_2.txt AC 1317 ms 25332 KB
oo1_3.txt AC 416 ms 23412 KB
oo1_4.txt AC 1187 ms 25080 KB
path_0.txt TLE 2105 ms 33280 KB
path_1.txt TLE 2105 ms 33152 KB
path_2.txt TLE 2104 ms 18560 KB
path_3.txt TLE 2104 ms 20736 KB
path_4.txt AC 1215 ms 11776 KB
path_5.txt TLE 2105 ms 29056 KB
rnd_0.txt TLE 2105 ms 30456 KB
rnd_1.txt TLE 2105 ms 36092 KB
rnd_2.txt AC 67 ms 6652 KB
rnd_3.txt TLE 2105 ms 34040 KB
rnd_4.txt AC 902 ms 25716 KB
sampleRnd.txt AC 1 ms 256 KB
sampleT.txt AC 1 ms 256 KB
slast_0.txt TLE 2105 ms 29940 KB
slast_1.txt AC 279 ms 23156 KB
slast_2.txt TLE 2105 ms 35576 KB
slast_3.txt AC 1317 ms 25588 KB
slast_4.txt TLE 2105 ms 31608 KB
tlast_0.txt AC 321 ms 22900 KB
tlast_1.txt TLE 2105 ms 28536 KB
tlast_2.txt TLE 2105 ms 34424 KB
tlast_3.txt TLE 2105 ms 37756 KB
tlast_4.txt TLE 2104 ms 39676 KB