题意
题目链接:https://oj.bashu.com.cn/code/problempage.php?problem_id=6289
题意简述:给定一个(n)个点,(m)条边的无向图,给定一个起点(st),保证边权都为正,有(q)个询问,每次给定终点(ed),求其(st)到(ed)的乘积最短路,由于答案可能会非常大,我们要把最后的答案模上998244353
乘积最短路定义:路径上的所有边权的乘积尽量小的路径
Solution
算法1:考虑没有取模的操作,就是最短路的板子...
算法2:可以考虑高精最短路...但是时间会炸
算法3:
一个很妙的转化
我们对于每一条路的状态,不仅记录它(%MOD)过后的值,还要记录对这条路取(log)的值(用(double))
而我们记录这个(log)值有什么用呢,我们发现,记录了这个(log)之后,我们的每一次乘法到这里全部都变成了加法!
容易发现这样一定是不会爆(double)的,而且这里随着路径原值的增加,其实(log)值也是单调递增的,所以我们可以直接用(log)值来代替原值
所以我们在比较的时候比较这个(log)值,而在更新答案的时候更新(MOD)过后的值就可以了