AT_ddcc2020_final_b Hawker on Graph
Description
[problemUrl]: https://atcoder.jp/contests/ddcc2020-final/tasks/ddcc2020_final_b
$ N $ 頂点 $ M $ 辺の重み付き有向グラフ $ G $ があります。 $ G $ の頂点には $ 1,\ 2,\ \ldots,\ N $、辺には $ 1,\ 2,\ \ldots,\ M $ と番号が振られています。 辺 $ i $ は頂点 $ u_i $ から頂点 $ v_i $ へ張られており、辺の重みは $ w_i $ です。 あなたは、$ G $ 上で次のようなゲームをします。
初めに、所持金 $ W $ 円を持って頂点 $ S $ 上に立つ。その後、以下の操作を $ K $ 回行う:
- 自分の今いる頂点から出ている辺を $ 1 $ つ選んで、その辺が接続する頂点に移動する。
- このとき、選んだ辺の重みを $ w $ とすると、$ w $ が正ならば $ w $ 円得る。逆に $ w $ が負ならば $ |w| $ 円失う。また、所持金が負となることはない。すなわち、元の所持金を $ t $ 円とすると、移動後の所持金は $ \mathrm{max}(t+w,\ 0) $ 円である。
同じ辺を何度通ってもよく、通るたびに所持金が変化します。 $ K $ 回の操作を完了する前に、移動が不可能になる頂点に訪れては行けません。 また、ゲーム終了時はどの頂点に立っていても構いません。
このとき、ゲーム終了時の所持金は最大でいくらにできるかを求め、出力してください。 ただし、どのように操作を行っても $ K $ 回の操作を完了できない場合は、$ -1 $ を出力してください。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $ $ W $ $ S $ $ K $ $ u_1 $ $ v_1 $ $ w_1 $ $ : $ $ u_M $ $ v_M $ $ w_M $
Output Format
$ K $ 回の操作を完了できる場合には、ゲーム終了時の所持金の最大値を出力せよ。 どのように操作を行っても完了できない場合は、$ -1 $ を出力せよ。
Explanation/Hint
### 制約
- $ 2\ \leq\ N\ \leq\ 200 $
- $ 0\ \leq\ M\ \leq\ N\ (N-1) $
- $ 0\ \leq\ W\ \leq\ 10^{16} $
- $ 1\ \leq\ S\ \leq\ N $
- $ 1\ \leq\ K\ \leq\ 10^9 $
- $ 1\ \leq\ u_i,\ v_i\ \leq\ N\ (1\ \leq\ i\ \leq\ M) $
- $ -10^7\ \leq\ w_i\ \leq\ 10^7\ (1\ \leq\ i\ \leq\ M) $
- $ u_i\ \neq\ v_i\ (1\ \leq\ i\ \leq\ M) $
- $ i\ \neq\ j $ ならば $ (u_i,\ v_i)\ \neq\ (u_j,\ v_j) $
### Sample Explanation 1
頂点を $ 1\ \rightarrow\ 2\ \rightarrow\ 3\ \rightarrow\ 1\ \rightarrow\ 2\ \rightarrow\ 5 $ と移動すれば、所持金は $ 8 $ 円となります。
### Sample Explanation 2
どのように操作を行っても $ 4 $ 回の操作を完了することはできません。したがって $ -1 $ を出力します。