此乃同余最短路

P3403 跳楼机
不妨令\(x<y<z\)

\(f_i\)的值为最小的满足\((ay+bz)\bmod x=i\)\(ay+bz\),那么对于任意\(\leq h\)\(f_i+bx\)全都满足条件。只要求出所有\(f_i(0\leq i<x)\)就可以计算出可拼出的所有数,反证如下:

假设存在\((cy+dz)\bmod x = i\),则有

\(cy+dz\equiv ay+bz\pmod x\rightarrow cy+dz=ay+bz+kx\)

\(f_i\)又是最小的\(ay+bz\),可知\(k\)必定为正,所以没有遗漏。

接下来考虑求出\(f_i\),发现对于每一个\(f_i\)都有:

\(f_i+y\geq f_{(i+y)\bmod x}\)

\(f_i+z\geq f_{(i+z)\bmod x}\)

证明:

以第一个为例,假设已经求出了\((ay+bz)\bmod x=i\),可得\(f_i\equiv i\pmod x\)

同余式两边同加\(y\),则有\(f_i+y\equiv i+y\pmod x\),而又有对应的\(cy+dz\equiv i+y\pmod x\)使得\(f_{(i+y)\bmod x}=cy+dz\),则有\(f_{(i+y)\bmod x}\equiv i+y\pmod x\),易得:

\(f_i+y\geq f_{(i+y\bmod x)}\longrightarrow f_i+y\geq f_{(i+y)\bmod x}\)

得证。(证了我半个小时,或将成为 全网同余最短路题解中这个式子唯一详细证明 数学最差的一集)

接下来直接差分约束建图,跑最短路即可,由于不存在负环的可能性,任意最短路算法均可做,思考一秒钟易得\(f_0=0\),从0号点开始跑即可,由于已经确定\(f_0\)的值且该值为最小值,那么跑出来的所有值均为最小值,满足要求。求答案即为:

\[\sum_{i=0}^{x-1}\lfloor\frac{h-f_i}{x}\rfloor+1 \]

加一是因为\(f_i\)本身也算一个。

注意让\(x\)最小并非强制,但\(x\)关系到图中点的数量,\(x\)越小效率越高,可以特判\(x/y/z=1\)の情况,输出h即可

posted @ 2025-10-27 09:31  BAMBANG  阅读(10)  评论(0)    收藏  举报
signature: { enable: true, contents: [ "This theme is built with awescnb.", "console.log(🍺);", ], },