結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-01-30 02:19:42 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,028 bytes |
| コンパイル時間 | 548 ms |
| コンパイル使用メモリ | 60,860 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-08 03:42:28 |
| 合計ジャッジ時間 | 1,732 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 8 WA * 32 |
ソースコード
//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 };
if (ym.Y > C)
return ans;
vector<YM> vec;
for (int i = 0; i < N; ++i)
{
if (S[i] == p)
{
vec.push_back(solve(T[i], YM{ ym.Y + Y[i], ym.M + M[i] }));
}
}
vector<YM>::iterator it = vec.begin();
for (; it != vec.end(); ++it)
{
if ((*it).M < 0)
continue;
if ((*it).Y > C)
continue;
if (ans.M < 0 || ans.M > (*it).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];
//結果出力
int ans = solve(1, YM{ 0, 0 }).M;
cout << ans << endl;
return 0;
}