2024.10.19总结


A:

考虑随便取一个数 vv,用一次询问问出 t=loggvt=\log_g v

我们希望找到一个 xx 使得 vxg(modp)v^x\equiv g\pmod p,也即 gtxg(modp)    tx1(modp1)g^{tx}\equiv g\pmod p\iff tx\equiv 1\pmod {p-1}。于是,我们希望找到的 vv 使得 ttp1p-1 互质即可。

由原根的相关知识我们知道,这样的 vv 就是 (modp)\pmod p 意义下的原根。于是找到 (modp)\pmod p 意义下的最小原根后,即可在一次询问内解决问题。

B:

没改。

C:

边分治。

假设我们现在钦定了一条边,那么这条边一定将图划分为两部分,而且从一部分中的点 aa 到另一部分中的点 bb 一定经过这条边的端点之一。

设两端点为 l,rl,r,那么 disa,b=min(disa,l+disl,b,disa,r+disr,b)dis_{a,b}=\min(dis_{a,l}+dis_{l,b},dis_{a,r}+dis_{r,b}),而 au+avbu+bv    aububvava_u+a_v\le b_u+b_v\iff a_u-b_u\le b_v-a_v,排一遍序即可统计跨过这条边的答案。

考虑每次找到左右两部分边数最接近的边,不断分治即可,时间复杂度为 O(nlog2n)\mathcal O(n\log^2n)