#PTA2025L301. 我也要分叉吗

我也要分叉吗

题目描述

一棵有根树^* TT 的权值定义为:

f(T)=uTdu×auf(T) = \sum_{u\in T} d_u \times a_u

其中 dud_uuu 节点与根节点的最短路径边数,aua_u 表示节点的权值。

给定 nn 个节点和一个正整数 mm,每个节点都有一个正整数权值 aia_i

现在需要你构造一棵 mm 叉树^{\dagger} TT,满足以下条件:

  • 所有权值非 00 的节点互为兄弟关系,即不存在节点对 (i,j)(i, j),其中 iji \ne j,且 ai,aj0a_i,a_j \ne 0,满足 iijj 的祖先^{\ddagger},或 jjii 的祖先^{\ddagger}

  • 树的权值 f(T)f(T) 在所有满足上一个条件的 mm 叉树的权值中最小。

由于仅使用给定的 nn 个节点显然无法满足,因此你可以添加最多 nn 个权值为 00 的节点,新添加的节点编号从 n+1n + 1 开始,依次增加。


^*一颗包含 nn 个节点的树是指一个具有 nn 个节点、n1n-1 条边的无向连通图。有根树是在树中指定一个特殊的顶点作为根的树。

^{\dagger}mm 叉树指的是每个节点最多有 mm 个子节点的有根树。

^{\ddagger}节点 uu 的祖先指所有满足以下条件的顶点 vvvuv \ne u,并且从根节点到 uu 的最短路径经过 vv

输入描述

有多组测试用例。

第一行包含一个正整数 tt1t51\le t\le 5),表示测试用例组数。

对每组测试用例:

第一行包含两个正整数 nnmm2mn1052\le m\le n \le 10^5),分别表示节点个数、树的叉数。

第二行包含 nn 个正整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1091\le a_i \le 10^9)。

保证所有测试用例中 nn 之和不超过 10510^5

输出描述

对每组测试用例:

第一行输出三个正整数 f(T),k,sf(T),k,s,分别表示树的权值,添加的权值为 00 的节点个数,根节点编号。

接下来输出 n+k1n + k - 1 行,每行包含两个正整数 u,vu, v 表示节点 uuvv 之间有一条边。

若有多种合法方案,输出任意一种即可。

样例

1
5 3
1 2 3 4 5
21 2 6
6 4
6 5
6 7
7 1
7 2
7 3

数据范围

共有 3030 组测试点。

对于前 55 组测试点 nn 之和不超过 1010

对于第 661515 组测试点 nn 之和不超过 10410^4

对于第 16163030 组测试点 nn 之和不超过 10510^5