結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
ldsyb
|
| 提出日時 | 2016-06-30 23:54:21 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,007 bytes |
| コンパイル時間 | 1,236 ms |
| コンパイル使用メモリ | 67,696 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-08 04:28:20 |
| 合計ジャッジ時間 | 1,518 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 WA * 8 |
ソースコード
#include <iostream>
#include <algorithm>
using namespace std;
#define INF 99999999
struct edge{int from,to,cost,time;};
int main(){
int ans = 0,n,c,v;
cin >> n >> c >> v;
edge e[v];
for(int i = 0;i < v;i++) cin >> e[i].from;
for(int i = 0;i < v;i++) cin >> e[i].to;
for(int i = 0;i < v;i++){
e[i].from--;
e[i].to--;
}
for(int i = 0;i < v;i++) cin >> e[i].cost;
for(int i = 0;i < v;i++) cin >> e[i].time;
int timedp[n],costdp[n],prev[n];
fill(timedp,timedp + n,INF);
fill(costdp,costdp + n,INF);
fill(prev,prev + n,-1);
timedp[0] = costdp[0] = 0;
for(int i = 1;i < n;i++){
for(int j = 0;j < v;j++){
if(e[j].to == i && timedp[i] > timedp[e[j].from] + e[j].time && costdp[e[j].from] + e[j].cost <= c){
timedp[i] = timedp[e[j].from] + e[j].time;
costdp[i] = costdp[e[j].from] + e[j].cost;
prev[i] = j;
}
}
}
if(timedp[n - 1] == INF){
cout << -1 << endl;
return 0;
}
for(int i = n - 1;i != 0;i = e[prev[i]].from) ans += e[prev[i]].time;
cout << ans << endl;
}
ldsyb