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)过后的值就可以了

原文地址:https://www.cnblogs.com/Akmaey/p/14076809.html