結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-01-30 03:42:50 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,340 bytes |
| コンパイル時間 | 630 ms |
| コンパイル使用メモリ | 58,100 KB |
| 実行使用メモリ | 10,784 KB |
| 最終ジャッジ日時 | 2024-07-08 03:43:02 |
| 合計ジャッジ時間 | 7,197 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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 };
YM list[V_MAX];
int s = 0;
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)
list[s++] = temp;
}
}
for (int i=0; i<s; ++i)
{
if (ans.M < 0 || list[i].M < ans.M)
ans = list[i];
}
return ans;
//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 != ved.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;
}