結果
| 問題 |
No.1 道のショートカット
|
| ユーザー |
|
| 提出日時 | 2014-12-01 18:29:18 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 4 ms / 5,000 ms |
| コード長 | 1,270 bytes |
| コンパイル時間 | 638 ms |
| コンパイル使用メモリ | 69,064 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-20 16:07:34 |
| 合計ジャッジ時間 | 1,885 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define N (51)
#define C (301)
#define V (1501)
#define INF (1e9)
struct Edge
{
int t, y, m;
Edge(int t, int y, int m)
: t(t)
, y(y)
, m(m)
{
}
};
int main()
{
int n, c, v;
cin >> n >> c >> v;
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<Edge>> graph;
graph.assign(n + 1, vector<Edge>());
for (int i = 0; i < v; ++i)
{
graph[s[i]].emplace_back(t[i], y[i], m[i]);
}
int ny_m[N][C];
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < C; ++j)
{
ny_m[i][j] = INF;
}
}
ny_m[1][0] = 0;
for (int i = 1; i <= n; ++i)
{
for (int j = 0; j <= c; ++j)
{
for (auto &e : graph[i])
{
if (ny_m[i][j] == INF || j + e.y > c) continue;
if (ny_m[e.t][j + e.y] > ny_m[i][j] + e.m)
{
ny_m[e.t][j + e.y] = ny_m[i][j] + e.m;
}
}
}
}
int ans = *min_element(ny_m[n], ny_m[n] + c + 1);
cout << (ans < INF ? ans : -1) << endl;
return 0;
}