[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 内的数据用于检查并改正代码。