#P14620. [2019 KAIST RUN Fall] Minimum Diameter Spanning Tree

[2019 KAIST RUN Fall] Minimum Diameter Spanning Tree

Description

给定一个具有 NN 个节点和 MM 条边的简单连通无向加权图 GG。每个节点编号为 11NN

GG 的一棵生成树是 GG 的一个子图,它是一棵树并且连接了 GG 的所有顶点。一棵树的直径是树中任意两个节点之间的路径中最长路径的长度。GG 的一棵最小直径生成树是 GG 的生成树中直径最小的那棵。

请编写一个程序,找出任意一棵最小直径生成树。

Input Format

输入的第一行包含两个整数 NN2N5002 \le N \le 500)和 MMN1MN(N1)2N-1 \le M \le \frac{N(N-1)}{2})。

接下来是 MM 行:第 ii1iM1 \le i \le M)行包含三个以空格分隔的整数 uiu_iviv_ilil_i1ui,viN1 \le u_i, v_i \le N1li1091 \le l_i \le 10^9);它描述了一条连接顶点 uiu_i 和顶点 viv_i、长度为 lil_i 的双向边。

保证给定的图没有任何自环或多重边,并且图是连通的。

Output Format

第一行输出 GG 的最小直径生成树的直径。

接下来的 N1N-1 行,输出最小直径生成树中边的描述。第 jj1jN11 \le j \le N-1)行应包含两个以空格分隔的整数 xix_iyiy_i1xi,yiN1 \le x_i, y_i \le N);它描述了一条连接顶点 xix_iyiy_i 的双向边。

如果有多个可能的答案,输出其中任意一个。

3 3
1 2 1
2 3 1
3 1 1
2
1 2
3 1
6 7
1 2 10
2 3 20
1 3 30
3 4 1000
4 5 30
5 6 20
4 6 10
1060
3 4
6 4
5 6
2 3
1 2

Hint

翻译由 DeepSeek V3 完成