結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
ソースコード
#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;
}