顾名思义,建立在同余基础上的最短路。一般来讲,用于问凑数之类的问题时用,基本思想为 若有 \(ax=b\),求 \(b\) 的数量,则 \(ax=b+kx\) 均为可行解。
1.跳楼机
如果你现在能到达第 \(i\) 层,则 \(i+kx\) 层均可到达,所以我们考虑在对 \(x\) 取模的意义下建立多个点表示 \(0-x\),从 \(i\) 号点向 \((i+y)%x\) 与 \((i+z)%x\) 连边,边权分别为 \(y,z\)。然后对每个点跑一遍以 \(0\) 为源点的最短路,求出每个 \(dis[i]\)。
那 \(dis[i]\) 有什么用呢?这表示了对 \(x\) 取模后为 \(i\) 的最小可达楼层,我们便可以据此算出取模后为 \(i\) 的楼层对答案的贡献:\((h-dis[i])/x+1\)。具体细节参照代码。
2.墨墨的等式
题目原址
先将题目所求的 \(l-r\) 转换为 \(r\) 与 \(l-1\) 的答案相减,相对上一题而言,这一题将 \(x,y,z\) 的数量增多了,所以我们任选一个非零的 \(a_i\),以它作为 \(x\) 进行上一题的步骤。答案的统计同上。
由于作者菜菜的,有问题不吝赐教。
标签:取模,题目,短路,ax,同余,dis From: https://www.cnblogs.com/GCSG01/p/18673178