F.A.Q
Hand In Hand
Online Acmers
Problem Archive
Realtime Judge Status
Authors Ranklist
 
     C/C++/Java Exams     
ACM Steps
Go to Job
Contest LiveCast
ICPC@China
Best Coder beta
VIP | STD Contests
    DIY | Web-DIY beta
Author ID 
Password 
 Register new ID

Link Cut Tree

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 90    Accepted Submission(s): 21


Problem Description
给一棵$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}$。
 

Input
第一行一个正整数$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$。
 

Output
对于每组数据,输出一个数,表示答案。
 

Sample Input
2 5 1 2 3 4 7 1 1 3 3 5 5
 

Sample Output
0 249561090
 

Hint

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

第二组数据,真实的答案是 7/4。
 

Source
 

Statistic | Submit | Discuss | Note
Hangzhou Dianzi University Online Judge 3.0
Copyright © 2005-2024 HDU ACM Team. All Rights Reserved.
Designer & Developer : Wang Rongtao LinLe GaoJie GanLu
Total 0.000000(s) query 1, Server time : 2024-04-20 08:36:24, Gzip enabled