結果

問題 No.1 道のショートカット
ユーザー wightou
提出日時 2025-06-27 08:54:28
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 36 ms / 5,000 ms
コード長 1,539 bytes
コンパイル時間 3,668 ms
コンパイル使用メモリ 294,244 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-06-27 08:54:34
合計ジャッジ時間 5,920 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 40
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

/////////////////// メイン ///////////////////

int main () {
  
  //////////////////// 入力 ////////////////////

  int n, c, v;
  cin >> n >> c >> v;

  vector<int> s(v);
  for (int i=0; i<v; i++) {
    cin >> s.at(i);
    s.at(i)--;
  }

  vector<int> t(v);
  for (int i=0; i<v; i++) {
    cin >> t.at(i);
    t.at(i)--;
  }

  vector<int> y(v);
  for (int i=0; i<v; i++) {
    cin >> y.at(i);
  }

  vector<int> m(v);
  for (int i=0; i<v; i++) {
    cin >> m.at(i);
  }

  vector<vector<tuple<int,int,int>>> graph(n);
  for (int i=0; i<v; i++) {
    graph.at(s.at(i)).emplace_back(m.at(i),t.at(i),y.at(i));
  }

  //////////////// 出力変数定義 ////////////////

  int result = 2e9;

  //////////////////// 処理 ////////////////////

  vector<vector<int>> times(n,vector<int>(c+1,-1));

  priority_queue<tuple<int,int,int>,vector<tuple<int,int,int>>,greater<tuple<int,int,int>>> que;
  que.emplace(0,0,0);

  while(!que.empty()) {

    auto [time1,city1,cost1] = que.top();
    que.pop();

    if (cost1>c) continue;
    if (times.at(city1).at(cost1)!=-1) continue;

    times.at(city1).at(cost1) = time1;

    for (auto [time2,city2,cost2] : graph.at(city1)) {
      que.emplace(time1+time2,city2,cost1+cost2);
    }

  }

  for (int i : times.at(n-1)) {
    if (i>=0) result = min(result,i);
  }
  if (result==2e9) result = -1;

  //////////////////// 出力 ////////////////////

  cout << result << endl;

  //////////////////// 終了 ////////////////////

  return 0;

}
0