AT_s8pc_4_f Find the Route!

题目描述

有一个 $H \times W$ 的网格。左上角的坐标是 $(1,1)$,右下角的坐标是 $(H,W)$。 有 $N$ 个格子中绘有箭头,从坐标 $(a_i,b_i)$ 出发的箭头的终点是在方向 $c_i$、距离 $d_i$ 处的位置。 同一个格子中不会有多个箭头。 现在,E869120 想仅通过跟随箭头从起点 $(sx,sy)$ 到终点 $(gx,gy)$。 然而,在当前的棋盘上,有时无法到达终点。 因此,E869120 决定修改网格,但修改网格需要付出代价。 他可以按照以下方式修改每个箭头的方向和长度: - 将方向 $c_i$ 更改为其他方向,代价为 $e_i$。 - 将距离 $d_i$ 的值更改为 $G$,代价为 $f \times |d_i-G|$,其中 $|p|$ 表示 $p$ 的绝对值($d_i$ 可以取负值,$f$ 是所有箭头共有的常数)。 - 允许 $d_i$ 取负值,此时箭头方向相反,箭头的长度为 $|d_i|$。 求为了使得可以仅通过跟随箭头从起点到终点,对棋盘做最小代价的修改。 如果无论如何修改也无法到达终点,请输出 "-1"。 注意,箭头是单向的,不能在箭头的中途拐弯。 此外,坐标系 $(p1,p2)$ 中,$p1$ 越小表示靠北侧,$p2$ 越小表示靠左侧(西侧)。

输入格式

输入按以下格式从标准输入给出。 > $H$ $W$ $N$ $f$ $sx$ $sy$ $gx$ $gy$ $a_1$ $b_1$ $c_1$ $d_1$ $e_1$ $a_2$ $b_2$ $c_2$ $d_2$ $e_2$ : : : $a_N$ $b_N$ $c_N$ $d_N$ $e_N$

输出格式

请输出使得从起点到终点能够到达所需最小的箭头修改代价。 若无法到达,请输出 -1。 末尾需换行。

说明/提示

## 限制条件 - $1 \leq H,W \leq 100000$ - $1 \leq N \leq 70000$ - $1 \leq f, e_i \leq 1000000$ - $1 \leq d_i \leq 100000$ - $1 \leq a_i, sx, tx \leq H$ - $1 \leq b_i, sy, ty \leq W$ - $c_i$ 为 'N', 'E', 'S', 'W' 其中之一。'N' 表示北侧(上方),'E' 表示东侧(右方)。 ## 小子任务 小子任务1【190分】 - 满足 $H = 1$。 - 满足 $W \leq 600$。 小子任务2【170分】 - 满足 $H,W \leq 80$。 小子任务3【360分】 - 满足 $H,W \leq 600$。 小子任务4【430分】 - 无附加限制。 由 ChatGPT 5 翻译