题目中要求的是在控制操作序列完全随机的情况下,期望控制的点的个数。
由于每个点被控制之后对答案的贡献都是 1,因此答案可以转化为每个点被控制的概率之和,这些概率的计算相互独立,因此可以把每个点分开计算。
操作序列完全随机可以理解为控制操作序列可能为 n 的全排列,每一个排列的出现概率相等,这个城市被控制的概率即为所有合法排列数与 n! 的比值。
对于每个点 u 计算合法排列数,一个合法排列 \left\{p_1, p_2, \cdots, p_n\right\} 需要满足的条件是至少存在一个在 [1, n] 内的整数 k,满足 n - k + 1 \ge G_{p_k, u},其中 G_{p_k, u} 表示城市 p_k 到点 u 的距离。
这个显然可以状压/容斥计算,但是这样的复杂度是 \mathcal O\left(2^nm\right) 级别的,因为“至少存在” 的限制不是很好满足。
考虑补集转化,计算对于每个待控制点不合法的排列数。这样的限制条件就转变成了求对于任意的 k,n - k + 1 < G_{p_k, u} 的排列数。
这样就可以通过往排列中逐渐插入新的元素的方式把这个排列构造出来。
因为距离为 n + 1 的城市可以放在任何位置,距离为 n 的城市不可以放在第一个位置,可以插入的位置逐渐减少而且可以插入的左端点右移。这样我们可以按照距离从大到小的顺序,从一个空排列开始向这个排列中逐渐插入元素,因为插入一个新的元素后,只有后面的元素会右移,这样不会影响排列的合法性。最后将所有元素的可插入位置总数相乘即得所有不合法排列数。这样计算的复杂度对于每个点都是 \mathcal O\left(n\right) 的,总的复杂度为 \mathcal O\left(nm\right)。
用这种方法求得不合法的排列数,计算出合法排列数,再来计算概率即可。
如果计算逆元直接使用费马小定理,最后统计答案的复杂度和 \mathcal O\left(nm\right) 同阶。