Atcoder abc281
https://atcoder.jp/contests/abc281/tasks
G - Farthest CIty
问 n个点, 的简单连通图, 1到n的距离 严格大于所有1到其它点的距离的 图有多少个
个数 mod m
范围
n 500
m [1e8,1e9]
4s
1024mb
我的思路
数数嘛, 对于一个具体的图, 考虑计算所有点到1的距离,看一下相邻点的性质,
显然 相邻点的距离
值 差不大于1
所以有一个O(n^4) 的dp
dp[最大距离为i][距离为i的有j个][距离<=i的有k个] = 的方案数
有转移 dp[i][j0][k0] = dp[i-1][j1][k1] * binom(n-k1,j0)/j0个在剩下的中选/ * (2^(j1)-1)^j0(每个分别和前面j1的连接方式) * 2^(j0(j0-1)/2) (j0个内部的任意连接) , 其中 k0=k1+j0
这样答案就是 sum dp[1..n][1][n]
要是能优化成O(n^3)就能过了, 比赛时想了半天, 发现i无关, 想说矩阵乘法快速幂次, binom拆一拆 搞了半天
赛后又想了想, 可以完全不要 i
直接 dp[用了k个点][最大距离的有j个点]
的方案数 就完了………………..
dp[i0][j0] = dp[i1][j1] * binom(n-i1,j0) * (2^{j1}-1)^j0 * 2^(j0(j0-1)/2), 其中 i0=i1+j0
ans=dp[n][1]
其实这里有点问题, 因为中间选的时候不能选择 最后一个
所以不妨 先把 n拿出来 最后考虑它
这样转移方程不变
ans= sum dp[n-1][j=1..n-1] * (2^j-1)
然后加个预处理 去掉 中间的log复杂度