提出 #25464575


ソースコード 拡げる

#include <algorithm>
#include <cassert>
#include <functional>
#include <iostream>
#include <limits>
#include <queue>
#include <tuple>
#include <utility>
#include <vector>

template <typename CostType>
struct Edge {
  int src, dst; CostType cost;
  Edge(int src, int dst, CostType cost = 0) : src(src), dst(dst), cost(cost) {}
  inline bool operator<(const Edge &x) const {
    return cost != x.cost ? cost < x.cost : dst != x.dst ? dst < x.dst : src < x.src;
  }
  inline bool operator<=(const Edge &x) const { return !(x < *this); }
  inline bool operator>(const Edge &x) const { return x < *this; }
  inline bool operator>=(const Edge &x) const { return !(*this < x); }
};

template <typename CostType>
struct Dijkstra {
  const CostType inf;

  Dijkstra(const std::vector<std::vector<Edge<CostType>>> &graph,
           const CostType inf = std::numeric_limits<CostType>::max())
  : graph(graph), inf(inf) {}

  std::vector<CostType> build(int s) {
    is_built = true;
    int n = graph.size();
    std::vector<CostType> dist(n, inf);
    dist[s] = 0;
    prev.assign(n, -1);
    using Pci = std::pair<CostType, int>;
    std::priority_queue<Pci, std::vector<Pci>, std::greater<Pci>> que;
    que.emplace(0, s);
    while (!que.empty()) {
      CostType cost; int ver; std::tie(cost, ver) = que.top(); que.pop();
      if (dist[ver] < cost) continue;
      for (const Edge<CostType> &e : graph[ver]) {
        if (dist[e.dst] > dist[ver] + e.cost) {
          dist[e.dst] = dist[ver] + e.cost;
          prev[e.dst] = ver;
          que.emplace(dist[e.dst], e.dst);
        }
      }
    }
    return dist;
  }

  std::vector<int> build_path(int t) const {
    assert(is_built);
    std::vector<int> res;
    for (; t != -1; t = prev[t]) res.emplace_back(t);
    std::reverse(res.begin(), res.end());
    return res;
  }

private:
  bool is_built = false;
  std::vector<std::vector<Edge<CostType>>> graph;
  std::vector<int> prev;
};

int main() {
  int n, m;
  std::cin >> n >> m;
  std::vector<std::vector<Edge<int>>> graph(n + 1);
  for (int i = 1; i <= n; ++i) {
    graph[i].emplace_back(i, i - 1, 0);
    graph[i - 1].emplace_back(i - 1, i, 1);
  }
  while (m--) {
    int l, r, x;
    std::cin >> l >> r >> x;
    graph[l - 1].emplace_back(l - 1, r, r - l + 1 - x);
  }
  std::vector<int> a = Dijkstra(graph).build(0);
  for (int i = 1; i <= n; ++i) {
    std::cout << 1 - (a[i] - a[i - 1]) << " \n"[i == n];
  }
  return 0;
}

提出情報

提出日時
問題 G - 01Sequence
ユーザ emthrm
言語 C++ (GCC 9.2.1)
得点 600
コード長 2524 Byte
結果 AC
実行時間 286 ms
メモリ 36688 KiB

コンパイルエラー

./Main.cpp: In instantiation of ‘Dijkstra<CostType>::Dijkstra(const std::vector<std::vector<Edge<CostType> > >&, CostType) [with CostType = int]’:
./Main.cpp:81:38:   required from here
./Main.cpp:64:44: warning: ‘Dijkstra<int>::graph’ will be initialized after [-Wreorder]
   64 |   std::vector<std::vector<Edge<CostType>>> graph;
      |                                            ^~~~~
./Main.cpp:25:18: warning:   ‘const int Dijkstra<int>::inf’ [-Wreorder]
   25 |   const CostType inf;
      |                  ^~~
./Main.cpp:27:3: warning:   when initialized here [-Wreorder]
   27 |   Dijkstra(const std::vector<std::vector<Edge<CostType>>> &graph,
      |   ^~~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 2
AC × 65
セット名 テストケース
Sample example0.txt, example1.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, 050.txt, 051.txt, 052.txt, 053.txt, 054.txt, 055.txt, 056.txt, 057.txt, 058.txt, 059.txt, 060.txt, 061.txt, 062.txt, example0.txt, example1.txt
ケース名 結果 実行時間 メモリ
000.txt AC 8 ms 3948 KiB
001.txt AC 5 ms 3940 KiB
002.txt AC 5 ms 3856 KiB
003.txt AC 7 ms 3928 KiB
004.txt AC 7 ms 3904 KiB
005.txt AC 7 ms 4028 KiB
006.txt AC 107 ms 9736 KiB
007.txt AC 108 ms 9612 KiB
008.txt AC 106 ms 9764 KiB
009.txt AC 60 ms 26568 KiB
010.txt AC 59 ms 26512 KiB
011.txt AC 61 ms 26632 KiB
012.txt AC 64 ms 26908 KiB
013.txt AC 67 ms 26708 KiB
014.txt AC 64 ms 26780 KiB
015.txt AC 238 ms 34792 KiB
016.txt AC 258 ms 35384 KiB
017.txt AC 267 ms 36216 KiB
018.txt AC 174 ms 33032 KiB
019.txt AC 174 ms 33176 KiB
020.txt AC 172 ms 33236 KiB
021.txt AC 176 ms 33032 KiB
022.txt AC 7 ms 3460 KiB
023.txt AC 62 ms 26688 KiB
024.txt AC 60 ms 26560 KiB
025.txt AC 59 ms 26556 KiB
026.txt AC 8 ms 3560 KiB
027.txt AC 2 ms 3480 KiB
028.txt AC 74 ms 7544 KiB
029.txt AC 72 ms 7624 KiB
030.txt AC 63 ms 26612 KiB
031.txt AC 61 ms 26700 KiB
032.txt AC 58 ms 26564 KiB
033.txt AC 60 ms 26572 KiB
034.txt AC 59 ms 26656 KiB
035.txt AC 262 ms 35172 KiB
036.txt AC 266 ms 35376 KiB
037.txt AC 262 ms 35244 KiB
038.txt AC 262 ms 35164 KiB
039.txt AC 264 ms 35184 KiB
040.txt AC 62 ms 26508 KiB
041.txt AC 60 ms 26560 KiB
042.txt AC 63 ms 26752 KiB
043.txt AC 58 ms 26652 KiB
044.txt AC 61 ms 26572 KiB
045.txt AC 251 ms 35220 KiB
046.txt AC 286 ms 36432 KiB
047.txt AC 264 ms 35172 KiB
048.txt AC 239 ms 34616 KiB
049.txt AC 273 ms 36436 KiB
050.txt AC 103 ms 28612 KiB
051.txt AC 102 ms 28668 KiB
052.txt AC 100 ms 28720 KiB
053.txt AC 102 ms 28672 KiB
054.txt AC 95 ms 28408 KiB
055.txt AC 163 ms 32652 KiB
056.txt AC 164 ms 32772 KiB
057.txt AC 178 ms 32972 KiB
058.txt AC 180 ms 32812 KiB
059.txt AC 186 ms 34912 KiB
060.txt AC 197 ms 34748 KiB
061.txt AC 223 ms 36532 KiB
062.txt AC 243 ms 36688 KiB
example0.txt AC 5 ms 3600 KiB
example1.txt AC 2 ms 3620 KiB