[DMOI-R2] 梦境
题目背景
小 A 做噩梦了。
题目描述
小 A 的梦境可以看做有 $n$ 个点,$m$ 条边的无向图。小 A 在图上的点 $S$,有一个怪物在点 $B$,安全屋在点 $F$。
怪物正在追杀小 A,现在小 A 需要逃到安全屋。小 A 意识到这是在自己的梦境里,所以他在一定程度上操控了梦境。他把怪物的移动速度设置成了 $3$,但代价是自己的移动速度被设置成 $2$。
小 A 始终会沿着到 $F$ 的最短路走,如果有多条最短路,则小 A 会选择使得**经过点的编号所顺次构成序列的字典序最小**的那条最短路,因为他觉得这样走最不容易被怪物抓到。
而怪物在梦境中游荡,会随机向自身周围的点移动,且怪物已经访问过的点不会重复访问。
现在小 A 需要知道**在最坏情况下**他能否安全到达安全屋,或者何时被怪物抓住。
输入输出格式
输入格式
第一行五个整数 $n,m,S,B,F$。
接下来 $m$ 行,第 $i$ 行三个整数 $u_i,v_i,w_i$,代表 $u_i,v_i$ 之间有一条长度为 $w_i$ 的无向边。
输出格式
两行。
如果小 A **在最坏情况下**能够安全到达安全屋,输出 `YES`,接下来一行输出小 A 到达安全屋后怪物到安全屋的距离。
如果小 A **在最坏情况下**不能安全到达安全屋,输出 `NO`,接下来一行输出小 A 在何时被怪物抓到。
若第二行的答案为整数则输出整数,**否则输出小数**。
输入输出样例
输入样例 #1
4 3 1 2 3
1 3 1
2 4 2
4 3 1
输出样例 #1
YES
1.5
输入样例 #2
4 3 1 2 3
1 3 2
2 4 2
4 3 1
输出样例 #2
NO
1
说明
**关于最坏情况的解释**:怪物的走法可能有多种。也就是说,你需要同时考虑怪物的每种走法,只要怪物的某种最短路走法可以抓到小 A 时答案即为 `NO`。而最坏情况是指怪物的走法在所有走法中能够最快抓到(或接近)小 A 的情况。
另外本题没有 special judge,也就是说如果答案是整数,你需要严格输出整数答案,不带小数点。同时数据保证不存在小数位数超过两位的答案。
### 数据范围
本题采用捆绑测试。
$$
\def{\arraystretch}{1.5}
\begin{array}{c|c|c|c|c}\hline
\textbf{~~Subtask~~}&\bm{~~n \le ~~}&\bm{~~~~m \le~~~~}& ~\textbf{~~特殊性质~~}~&\textbf{~~分值~~}\cr\hline
0 &10 &20 & &10\cr\hline
1 &500 &1000 & &10\cr\hline
2 &800 &2000 & &10\cr\hline
3 &2\times10^5& &\text{A+B}&15 \cr\hline
4 &2\times10^5& &\text{A}&15 \cr\hline
5 &10^5 &2\times10^5& &20\cr\hline
6 &2\times10^5&2\times10^5& &20
\end{array}
$$
特殊性质 $\text{A}$:$m=n-1$。
特殊性质 $\text{B}$:对于给定的每个 $v_i$,满足 $v_i=u_i+1$。
对于 $100\%$ 的数据,保证 $S \ne B \ne F$ 且 $1 \le S,B,F \le n$,$1 \le w_i \le 10^3$,图连通且不存在重边。
### 特殊评分方式
本题开启子任务依赖,具体如下:
- 对于子任务 $i\in\{0,3\}$,您只需答对子任务 $i$ 即可获得子任务 $i$ 的分数。
- 对于子任务 $4$,您需要答对子任务 $3$ 才能获得子任务 $4$ 的分数。
- 对于子任务 $i\in\{1,2,5,6\}$,您需要答对子任务 $0$ 才能获得子任务 $i$ 的分数。
### 附件说明
对于赛时许多选手卡在了 sub3,此处提供一组 sub3 内的数据用于检查并改正代码。