結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-01-30 03:15:44 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 956 bytes |
| コンパイル時間 | 684 ms |
| コンパイル使用メモリ | 60,936 KB |
| 実行使用メモリ | 10,144 KB |
| 最終ジャッジ日時 | 2024-07-08 03:42:55 |
| 合計ジャッジ時間 | 7,122 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 4 TLE * 1 -- * 35 |
ソースコード
//No.1 道のショートカット
//メモ:
// 有効グラフの閉路はない
// 無効グラフの閉路はある
#include <iostream>
#include <vector>
#define V_MAX 1500
using namespace std;
int N, C, V;
int S[V_MAX], T[V_MAX], Y[V_MAX], M[V_MAX];
typedef struct
{
int Y;
int M;
} YM;
YM solve(int p, YM ym)
{
if (p == N)
return ym;
YM ans = YM{ -1, -1 };
vector<YM> vec;
for (int i = 0; i < V; ++i)
{
if (S[i] == p)
{
YM temp = solve(T[i], YM{ ym.Y + Y[i], ym.M + M[i] });
if (temp.Y <= C)
vec.push_back(temp);
}
}
vector<YM>::iterator it = vec.begin();
for (; it != vec.end(); ++it)
{
if (ans.M < 0 || (*it).M < ans.M)
ans = (*it);
}
return ans;
}
int main()
{
//N,C,V取得
cin >> N >> C >> V;
//S,T,Y,M取得
int* D[4] = { S, T, Y, M };
for (int di = 0; di < 4; ++di)
for (int i = 0; i < V; ++i)
cin >> D[di][i];
//結果出力
cout << solve(1, YM{ 0, 0 }).M << endl;
return 0;
}