题意
有两个点集 S , T S,T S,T, $\quad \forall x \in S, y \in T $, x , y x,y x,y 之间有 1 2 \frac{1}{2} 21概率存在一条边。
现在任意从 S , T S,T S,T中各随机挑选一个点,问这两个点之间的期望距离。
若不连通,则距离为 0 0 0
输出期望距离在模 P P P 域下的值,保证 P P P 是质数。
对于 30 % 30\% 30% 的数据,满足 1 ≤ n , m ≤ 4 1 \le n,m \le 4 1≤n,m≤4
对于 50 % 50\% 50% 的数据,满足 1 ≤ n , m ≤ 30 1 \le n,m \le 30 1≤n,m≤30
对于 20 % 20\% 20% 的数据,满足 1 ≤ n , m ≤ 50 , p = 1000000007 1 \le n,m \le 50 , p= 1000000007 1≤n,m≤50,p=1000000007
对于 100 % 100\% 100% 的数据,保证 1 ≤ n , m ≤ 100 , 772001 ≤ p ≤ 1000000007 1 \le n,m \le 100, 772001 \le p \le 1000000007 1≤n,m≤100,772001≤p≤1000000007 ,保证 p p p为质数。
题解
其实想法很自然啊,不知道为什么考场上没有想出来。
因为A或B中的每个点都是等价的,故转化为A中1号点到B中1号点最短路的期望,再把期望转化为方案数会方便一点。
直接从A中1号点开始考虑,如果与B中1号点有连边,则距离为1,否则可到达B中的一些点,变为从这些点走到终点的最短路。考场上一直在想边会重复考虑就自闭了,其实求最短路就是bfs的过程,又边只会在A,B集合之间,故直接对于当前可走的点把连向对面的所有点都考虑上,这样之前被考虑过的点就不会有新的连边了。由此应该想到DP,记
f
[
i
]
[
j
]
[
k
]
[
0
/
1
]
f[i][j][k][0/1]
f[i][j][k][0/1]为A、B中已分别有i,j个点被到达,目前能往后走的有k个点,在A/B,乘上组合数转移即可(其实就是利用点的等价记录bfs过程的状态),效率
O
(
n
4
)
O(n^{4})
O(n4) (毒瘤数据范围害我卡常卡到自闭) 。