当前你的浏览器版本过低,网站已在兼容模式下运行,兼容模式仅提供最小功能支持,网站样式可能显示不正常。
请尽快升级浏览器以体验网站在线编辑、在线运行等功能。

建议使用的浏览器:

谷歌Chrome 火狐Firefox Opera浏览器 微软Edge浏览器 QQ浏览器 360浏览器 傲游浏览器

6841:Link Cut Tree

题目描述
给一棵$n$个点的有根树,每个点可以选择至多一个儿子作为重儿子。你可以对这棵树进行切换操作,每次选择一个点,指定其中一个儿子作为重儿子,而原来这个点的重儿子(如果有)将不再是重儿子。一开始每个点都没有重儿子。

现在你要进行$m$次操作,每次操作,你会选择一个点(也就是下面的$v_k$),然后得到这个点到根的路径,从根开始记作$v_1, v_2, \dots, v_k$,对于每个$i(1\leq i < k)$,如果$v_i$的重儿子不是$v_{i+1}$,那么会进行一次切换操作,将它的重儿子切换为$v_{i+1}$。你可以指定每次操作选择的点,使得$m$次操作之后切换次数最多。记$m$次操作之后最多的切换次数为$f(m)$。

求$\lim_{m\to +\infty} \frac{f(m)}{m}$的值,对$998244353$取模,可以证明极限存在。

简要题意就是给你一个Link Cut Tree,$f(m)$为执行$m$次access操作之后最坏情况下虚实边切换次数,问你最坏情况下平均的虚实边切换次数。

对于一个分数$a/b$,其中$\gcd(a,b)=1$,那么我们认为这个分数对$998244353$取模的值为一个数$c(0\leq c <
998244353)$满足$bc\equiv a \pmod {998244353}$。
输入解释
第一行一个正整数$T(1\leq T\leq 10^4)$表示数据组数。

对于每组数据,第一行一个整数$n(1\leq n\leq 5000)$,接下来一行$n-1$个数字$p_2, p_3, \dots, p_n (1\leq p_i < i)$,$p_i$表示$i$的父亲。

保证$\sum n\leq 10^6$。
输出解释
对于每组数据,输出一个数,表示答案。
输入样例
2
5
1 2 3 4
7
1 1 3 3 5 5
输出样例
0
249561090

提示
第一组数据是一条链,所以进行 O(1) 次切换之后就再也不用操作。

第二组数据,真实的答案是 7/4。
来自杭电HDUOJ的附加信息
Recommend heyang

该题目是Virtual Judge题目,来自 杭电HDUOJ

源链接: HDU-6841

最后修改于 2020-10-25T23:34:51+00:00 由爬虫自动更新

共提交 0

通过率 --%
时间上限 内存上限
4000/2000MS(Java/Others) 65536/65536K(Java/Others)