本题定义、输入格式、输出格式均与简单版本相同,在这个版本中,$$$n\le 5000$$$,但你需要构造出符合条件的树且每个节点深度总和最大化的方案。
排列:长度为 $$$n$$$ 的定义为由 $$$1\sim n$$$ 以不同顺序组成的序列,且每个元素恰好出现一次。例如 $$$[2,1,3],[2,4,1,3]$$$ 都是排列,而 $$$[4,1,2]$$$ 不是排列,因为 $$$3$$$ 没有出现,$$$[1,2,3,2]$$$ 不是排列,因为 $$$2$$$ 出现了 $$$2$$$ 次。
树的dfs序:对一棵树进行深度优先遍历(DFS),每当我们第一次访问某个节点时,就将该节点编号加入序列中。得到的访问顺序称为DFS 序。例如:
对于给定的树,$$$[1,2,3,4,5,6,7],[1,3,4,7,5,6,2],[3,4,1,2,7,5,6]$$$ 均是这棵树能形成的 dfs 序。$$$[1,2,4,3,5,6,7]$$$ 不是这棵树的 dfs 序,因为 $$$2$$$ 号点到 $$$4$$$ 号点存在未访问的 $$$3$$$ 号点,$$$[1,2,3,4,5,7,6]$$$ 不是这棵树的 dfs 序,因为子树 $$$5$$$ 不满足 DFS 遍历性质。
树的深度:我们定义根节点的深度为 $$$1$$$。对于其他任意节点 $$$u$$$,其深度为 $$$u$$$ 的父节点的深度加 $$$1$$$。
现在,给定 $$$2$$$ 个 $$$1\sim n$$$ 组成的排列,现在要求你构造包含这两种dfs序的树,且使得每个节点深度总和最大化。可以证明无论序列如何,总是存在对应的树。
第一行输入一个正整数 $$$T(1\le T\le 10^3)$$$,表示测试组数。
接下来每组测试中:
此外,数据保证所有测试点的 $$$n$$$ 之和不超过 $$$5000$$$。
对于每组数据,输出共 $$$n-1$$$ 行,使其形成一棵树,每行输出 $$$2$$$ 个正整数 $$$u,v(1\le u,v\le n,u\neq v)$$$,表示一条边。
如果存在多种合法解,输出其中任意一种即可。
361 2 3 6 5 41 2 3 4 5 681 2 8 5 7 4 6 31 6 3 4 5 7 2 871 2 3 4 5 6 71 3 4 7 5 6 2
1 22 33 63 53 41 22 81 55 71 41 66 31 21 33 44 55 64 7