5001.Rikka 与子集 IV

时间限制:10s 内存限制:512MB

我们都知道,Rikka 的数学不好,Yuta 很担心这个状况。所以他给了 Rikka 一些数学题来练习,下面是其中一道。

给定一棵 $n$ 个点的有标号树,问树上有多少大小为 $i$ 的连通块,对于 $1≤i≤n$ 输出答案。

两个连通块不同,当且仅当两个连通块的点集不同。

输入格式(从终端/标准输入读取)

第一行一个正整数 $T(1≤T≤100)$,表示测试数据组数。

对于每组数据,第一行一个整数 $n($2≤n≤10^5 )$,表示树上点的个数。

第二行 $n−1$ 个整数 $p_2,p_3,...,p_n(1\le p_i \lt i)$ ,$p_i$表示 $i$ 与 $p_i$ 之间有一条边相连。

保证数据满足 $∑n≤4×10^5$ 。

输出格式(输出至终端/标准输出)

对于每组数据,输出一行 $n$ 个整数,第 $i$ 个整数表示大小为 $i$ 的连通块个数,对 $998244353$ 取模。

输入样例

复制
3
5
1 1 2 2
6
1 1 2 2 3
6
1 1 2 2 5
 \n
 \n
 · · · \n
 \n
 · · · · \n
 \n
 · · · · \n

输出样例

复制
5 4 4 3 1
6 5 5 4 3 1
6 5 5 5 3 1
 · · · · \n
 · · · · · \n
 · · · · · \n

说明

本题中你可能需要更大的栈,我们建议在主函数使用如下代码扩充栈空间。

int main()
{
int size = 512 << 20; // 512M
__asm__("movq %0, %%rsp\n" :: "r"((char *)malloc(size) + size));
// Your code
exit(0);
}

请注意,你必须使用 exit 函数结束程序,否则你的程序将被判为 $RE$。

来源: 2024“钉耙编程”中国大学生算法设计超级联赛(6)

提交题解

Please login first.

© 2025 FAQs