题目描述
H 国有 个城市。
在接下来的 天,小 c 都会去找小 w,但是小 c 不知道小 w 的具体位置,所以小 c 决定每次随机找一条路走,直到遇到了小 w 为止。
小 c 知道小 w 只有可能是在 这 个城市中的一个,小 c 想知道在最坏情况下,小 c 遇到小 w 期望要经过多少条道路。
H 国所有的边都是无向边,两个城市之间最多只有一条道路直接相连,没有一条道路连接相同的一个城市。
任何时候,H 国不存在城市 和城市 满足从 无法到达 。
输入格式
输入第 1 行一个正整数,分别表示 H 国的城市数与边的数量
输入第 2 行至第 行,每行两个正整数 ,分别表示城市 到城市 有一条道路
输入第 行一个正整数
输入第 行至第 行每行 个正整数,第一个正整数为 ,接下来 个互不相同的正整数 ,最后一个正整数 表示小 c 所在的城市
输出格式
输出共 行,每行一个正整数 表示答案
如果你计算出来的期望为 ,其中互质,那么你输出的 满足 ,
且,可以证明这样的 是唯一的
输入输出样例 #1
输入 #1
1 2 3 4 5 6 7
| 3 2 1 2 2 3 3 2 1 2 1 3 1 2 3 1 1 3 1
|
输出 #1
说明/提示
国的道路构成一条链,所以最坏情况下就是小 w 在深度最大的点上(以小 c 所在的城市为根)
对于第一天,小 c 所在的城市为 1,深度最大的点为 2,城市 1 只能到达城市 2,期望经过 1 条道路到达
对于第二天,小 c 所在的城市为 1,深度最大的点为 3,计算的期望经过 4 条道路到达
第三天同第二天
最坏情况也就是说经过所有 个可能的城市至少一遍
subtask1 : 10分,
subtask2 : 15分,
subtask3 : 15分,
subtask4 : 10分,,图是一条链
subtask5 : 10分,,所有的 都相同
subtask6 : 15分,,
subtask7 : 15分,,所有的 都相同
subtask8 : 10分,
对于所有数据 : 。
题解
状态转移原则:求概率正向转移,求期望逆向转移。
本题思路与 P3232 [HNOI2013] 游走 - 洛谷 高度相似。
设 表示已经遍历过了 集合,当前在点 时,要遍历完整个图的期望步数。那么对于每个询问的点集 , 就是答案,因为我们从 集合到全部走完刚好把询问的点全部走了一次。
状态转移方程很直观:
显然状态之间的依赖关系不是 DAG,需要使用高斯消元代替一般的 DP。状态总共有 个,高斯消元的复杂度为 显然需要优化。
观察上式,可以发现 一定是被包含在 里的,也就是说一个状态只能由一个点集不小于该状态的状态转移而来。
考虑对状态进行分层,层间是单向依赖,层内依赖关系才可能成环。从大到小在每个点集 内部分别进行高斯消元,复杂度 。