結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-04-23 16:17:30 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 5,000 ms |
| コード長 | 1,378 bytes |
| コンパイル時間 | 2,079 ms |
| コンパイル使用メモリ | 179,664 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-25 03:23:51 |
| 合計ジャッジ時間 | 3,410 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
template<class T> bool chmin(T& a,T b){
if(a > b){
a = b;
return true;
}
else return false;
}
int main(){
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];
for(int i=0;i<V;i++) cin >> T[i];
for(int i=0;i<V;i++) cin >> Y[i];
for(int i=0;i<V;i++) cin >> M[i];
vector<vector<pair<int,pair<int,int>>>> G(N);
for(int i=0;i<V;i++){
int s = S[i];
int t = T[i];
int y = Y[i];
int m = M[i];
s--;
t--;
G[s].push_back(make_pair(t,make_pair(y,m)));
}
int INF = 1000000000;
vector<vector<int>> dist(N,vector<int>(C+1,INF));
dist[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()){
int d = que.top().first;
int v = que.top().second.first;
int c = que.top().second.second;
que.pop();
if(d > dist[v][c]) continue;
for(auto e:G[v]){
int nv = e.first;
int y = e.second.first;
int m = e.second.second;
if(c+y > C) continue;
if(chmin(dist[nv][c+y],d+m)){
que.push(make_pair(d+m,make_pair(nv,c+y)));
}
}
}
int ans = INF;
for(int i=0;i<=C;i++) ans = min(ans,dist[N-1][i]);
if(ans == INF) ans = -1;
cout << ans << endl;
}