CF2135F.To the Infinity
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一棵有 n 个结点的满二叉树∗,根结点为 1。对于每个结点 u(1≤u≤n),定义函数 fu:R+→R+ 如下:
- 如果 u 是叶子†,则 fu(x)=x;
- 否则,设 u 的左儿子为 lu、右儿子为 ru,则 fu(x)=(flu(x))fru(x)。
对于两个结点 u 和 v,若且仅若下列条件之一成立,则认为 u≺v:
- 当 x→∞ 时,fu(x)<fv(x);
- 当 x→∞ 时,fu(x)=fv(x) 并且 u<v。
可以证明,对于任意两个不同的结点 u 和 v,总有 u≺v 或 v≺u。
你需要按 ≺ 的顺序对所有结点进行排序。形式上,你需要找到一个长度为 n 的排列§ p,使得对每个 1≤i<n,都有 pi≺pi+1。
∗ 满二叉树是一种有根树,其中每个结点要么没有儿子,要么正好有 2 个儿子。
† 叶子为没有儿子的结点。
‡ 这里 fu(x)<fv(x) 当 x→∞ 的定义是:存在一个正数 N,使得对所有 x>N,fu(x)<fv(x) 恒成立。fu(x)=fv(x) 也作同样定义。
§ 长度为 n 的排列是一个包含 n 个互不相同的 1 到 n 的整数的数组。例如,[2,3,1,5,4] 是一个排列;[1,2,2] 不是(2 出现两次),[1,3,4] 也不是(n=3 但出现了 4)。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 t(1≤t≤104),表示测试数据组数。
每组测试数据第一行为一个整数 n(1≤n≤4⋅105,n 是奇数),表示满二叉树的结点数。
接下来 n 行,每行两个整数 li 和 ri(0≤li,ri≤n),表示结点 i 的左儿子和右儿子。如果 i 是叶子,则 li=ri=0。保证输入一定是一棵以 1 为根的满二叉树。
保证所有测试数据中 n 之和不超过 4⋅105。
输出格式
对于每组测试数据,输出 n 个整数 p1,p2,…,pn(1≤pi≤n, 且所有 pi 互不相同),表示你找到的排列。你需要保证对每个 1≤i<n,都有 pi≺pi+1。
输入输出样例
输入#1
4 3 2 3 0 0 0 0 5 2 3 4 5 0 0 0 0 0 0 9 2 3 4 5 0 0 0 0 6 7 8 9 0 0 0 0 0 0 1 0 0
输出#1
2 3 1 3 4 5 2 1 3 4 7 8 9 6 5 2 1 1
说明/提示
在第一个测试样例中,f2(x)=f3(x)=x,f1(x)=(f2(x))f3(x)=xx。当 x→∞ 时,显然 f2(x)=f3(x)<f1(x)。因此,2≺3≺1。
在第二个测试样例中,f3(x)=f4(x)=f5(x)=x,f2(x)=(f4(x))f5(x)=xx,f1(x)=(f2(x))f3(x)=xx2。很显然,当 x→∞ 时 x<x2,即 f2(x)<f1(x)。同理,f3(x)=f4(x)=f5(x)<f2(x)<f1(x)。因此,3≺4≺5≺2≺1。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?