BSOJ 6289【NOIP2018模拟赛】黄昏
题意
题目链接: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\)过后的值就可以了