#P17096. 最遥远的距离
最遥远的距离
1008. 最遥远的距离
题目描述
还记得小时候,小河灵和胖胖龙常常结伴去公园游玩。公园有 n 个景点与 n − 1 条双向道路,每条双向道路连接两个不同的景点,任意两个不同的景点都可以通过若干条双向道路到达。换言之,这些景点的连接形成了一棵树。小河灵是一个喜欢探索的孩子,他想到公园的最远端瞧一瞧。为此,对于每个景点 i (1 ≤ i ≤ n),他都定义了该景点的探索度 di:从景点
i 出发,沿着一条不经过重复景点的简单路径前进,最多能经过多少个不同的景点(包含起点本身)。时过境迁,河灵慢慢长大,他已经记不清当年公园的具体模样了。但幸运的是,他的日记中仍然保存着当年记录下来的探索度序列
d1, d2, …, dn。
河灵很想找回当年的感觉。请你帮帮河灵,构造一个有 n 个景点与
n − 1 条双向道路的公园,该公园的任意两个不同景点都可以相互到达,并且每个景点 i (1 ≤ i ≤ n) 的探索度恰好为 di。或判断不存在满
足条件的公园。
输入格式
每个测试点中包含多组测试数据。输入的第一行包含一个正整数 T (
1 ≤ T ≤ 106 ),表示数据组数。对于每组测试数据:第一行一个正整数 n (1 ≤ n ≤ 105 ),表示公园的景点个数。第二行 n 个正整数 d1, d2, …, dn (1 ≤ di ≤ n),表示每个景点的探索
度。保证所有测试数据中 n 之和不超过 106。
输出格式
对于每组测试数据:若存在满足条件的公园,输出的第一行包含一个字符串 Yes。接下来 n − 1 行,每行输出两个正整数 x, y (1 ≤ x, y ≤ n),表示你给出的公园中,存在一条连接景点 x, y 的双向道路。若存在多种满足条件的公园,输出任意一种即可。若不存在满足条件的公园,输出一行一个字符串 No。
样例输入
2
7
5 5 5 4 4 4 3
3
2 2 2
样例输出
Yes
1 4
4 7
2 5
5 7
3 6
6 7
No
来源:官方题面 PDF(2026"钉耙编程"暑期联赛 第2场)