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

posted @ 2020-12-02 22:04  __Anchor  阅读(54)  评论(0编辑  收藏  举报