結果
問題 | No.1 道のショートカット |
ユーザー |
![]() |
提出日時 | 2020-06-02 10:30:36 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 6 ms / 5,000 ms |
コード長 | 1,473 bytes |
コンパイル時間 | 2,761 ms |
コンパイル使用メモリ | 205,120 KB |
最終ジャッジ日時 | 2025-01-10 20:31:59 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 40 |
ソースコード
#include <bits/stdc++.h> using namespace std; const int INF = 1 << 30; template <typename T> bool chmin(T &a, const T &b) { if (a > b) { a = b; return true; } return false; } int main() { ios::sync_with_stdio(false); cin.tie(0); int N, C, V; cin >> N >> C >> V; vector<int> S(V), T(V), Y(V), M(V); for (int i = 0; i < V; i++) { cin >> S[i]; S[i]--; } for (int i = 0; i < V; i++) { cin >> T[i]; T[i]--; } for (int i = 0; i < V; i++) { cin >> Y[i]; } for (int i = 0; i < V; i++) { cin >> M[i]; } vector<vector<int>> G(N); for (int i = 0; i < V; i++) { G[S[i]].emplace_back(i); } vector<vector<int>> D(N, vector<int>(C + 1, INF)); D[0][0] = 0; priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> que; que.push(make_pair(0, make_pair(0, 0))); while (!que.empty()) { auto q = que.top(); que.pop(); int d = q.first, c = q.second.first, u = q.second.second; if (D[u][c] < d) continue; for (int i : G[u]) { int v = T[i], dd = M[i], dc = Y[i]; if (c + dc > C) continue; if (chmin(D[v][c + dc], d + dd)) { que.push(make_pair(D[v][c + dc], make_pair(c + dc, v))); } } } if (*min_element(D[N - 1].begin(), D[N - 1].end()) == INF) { cout << -1 << '\n'; } else { cout << *min_element(D[N - 1].begin(), D[N - 1].end()) << '\n'; } return 0; }