結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
moko_freedom
|
| 提出日時 | 2018-04-30 08:01:48 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 15 ms / 5,000 ms |
| コード長 | 1,628 bytes |
| コンパイル時間 | 1,365 ms |
| コンパイル使用メモリ | 165,744 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-20 16:35:44 |
| 合計ジャッジ時間 | 2,602 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define INF 1.1e9
#define LINF 1.1e18
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define REP(i, n) FOR(i, 0, n)
#define RREP(i, n) for (int i = (n) - 1; i >= 0; i--)
#define ALL(v) (v).begin(), (v).end()
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define BIT(x, n) bitset<n>(x)
#define PI 3.14159265358979323846
typedef long long ll;
typedef pair< int, int > P;
typedef pair< int, P > PP;
//-----------------------------------------------------------------------------
int n, c, v;
vector< PP > G[50]; // fi -> to, se.fi -> cost, se.se -> time
int s[1500], t[1500], y[1500], m[1500];
int d[50][334];
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
cin >> n >> c >> v;
REP(i, v) cin >> s[i];
REP(i, v) cin >> t[i];
REP(i, v) cin >> y[i];
REP(i, v) cin >> m[i];
REP(i, v) {
s[i]--, t[i]--;
G[s[i]].pb(PP(t[i], P(y[i], m[i])));
}
REP(i, 50) REP(j, 334) d[i][j] = INF;
d[0][0] = 0;
priority_queue< PP > pq;
pq.push(PP(0, P(0, 0)));
while (!pq.empty()) {
PP p = pq.top();pq.pop();
int took_time = p.fi, cur = p.se.fi, cost = p.se.se;
if (d[cur][cost] < took_time) continue;
for (auto nxt: G[cur]) {
if (cost + nxt.se.fi > c) continue;
if (d[nxt.fi][cost + nxt.se.fi] <= d[cur][cost] + nxt.se.se) continue;
d[nxt.fi][cost + nxt.se.fi] = d[cur][cost] + nxt.se.se;
pq.push(PP(d[nxt.fi][cost + nxt.se.fi], P(nxt.fi, cost + nxt.se.fi)));
}
}
int ans = INF;
REP(i, 334) ans = min(ans, d[n - 1][i]);
if (ans == INF) cout << -1 << endl;
else cout << ans << endl;
return 0;
}
moko_freedom