【题解】人类智慧

\(\texttt{计蒜客T3203 }\text{人类智慧}\)

给定一张有 \(n\) 个点 \(m\) 条边的有向图,每个点上有点权,不妨认为 \(w_i\) 表示第 \(i\) 个点上的点权。还给了一个计数器以及一个正整数 \(T\),要求在任意时刻计数器的值都不能小于 \(0\) 或者大于 \(T\)。计数器初始时值为 \(0\),之后你可以在有向图上任意选择一条 路径(即边可以重复走),当每一次到达一个点 \(i\) 的时候,都可以进行以下操作之一:

  • 不操作;
  • 为计数器加上 \(w_i\)
  • 为计数器减去 \(w_i\)

起点是任意的,求可以让计数器达到的最大值。

(保证图中无重边、自环,\(1\le w_i\le T/2\)

先证一个引理:\(a,b\) 位于一个强联通分量中,设当前计数器值为 \(0\le t\le T\),若 \(0\le t +\gcd(w_a,w_b) \le T\),则可以使计数器达到 \(t+ \gcd(w_a,w_b)\);同理,可以使计数器达到 \(t-\gcd(w_a,w_b)\)

只证明分号前的命题即可。由 Bezout 定理知,存在 \((x,y)\) 使得 \(x\times w_a-y\times w_b=\gcd(w_a,w_b)\),其中 \(x,y\) 均为非负整数。现在构造达到这样 \((x,y)\) 的方案。设初始有 \((x_0,y_0)=(0,0)\),迭代 \(i\) 次后为 \((x_i,y_i)\)。若 \(t+x_{i-1}\times w_a-y_{i-1}\times w_b\le T/2\),则 \(x_i=x_{i-1}+1,y_i=y_{i-1}\);反之,则 \(x_i=x_{i-1},y_i=y_{i-1}+1\)。这样,始终有 \(0\le t+x_{i}\times w_a-y_{i}\le T\)。并且由于每次迭代后有一者增加 \(1\),另一者不变,必然存在一个 \(t\) 满足 \(x_t=x\land y_t\le y\) 或者 \(x_t\le x\land y_t= y\)。达到这样 \((x,y)\) 的方案即,如上所述迭代 \(t\) 次后,再一次性加 \(x-x_t\)\(w_a\) 最后一次性减 \(y-y_t\)\(w_b\)。引理证毕。

因此,一个强联通分量可以构造且只能构造出 \(\gcd\{w_i\}\) 的倍数的改变量,将强联通分量缩成点权为 \(\gcd\{w_i\}\) 的点。缩完点后跑背包,用 std::bitset 减小常数,假设 \(n,m\) 同阶,单组数据复杂度大概是 \(O(n\log T)\)code

\(\square\)

posted @ 2021-09-11 22:20  gsj_z  阅读(126)  评论(0编辑  收藏  举报