Description:


小 C 最近学了很多最小生成树的算法,Prim 算法、Kurskal 算法、消圈算法等等。 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了。小 P 说,让小 C 求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小的,也就是说: 如果最小生成树选择的边集是 \(E_M\) ,严格次小生成树选择的边集是 \(E_S\) ,那么需要满足: \(\sum_{e\in E_M} value(e)< \sum_{e\in E_S} value(e)\) (value(e) 表示边 e的权值) 这下小 C 蒙了,他找到了你,希望你帮他解决这个问题。

Input:


第一行包含两个整数N 和M,表示无向图的点数与边数。 接下来 M行,每行 3个数x y z 表示,点 x 和点y之间有一条边,边的权值为z。

Output:


包含一行,仅一个数,表示严格次小生成树的边权和。(数据保证必定存在严格次小生成树)

Sample Input:


Sample Output:


题解:


好像这道题也是全网唯一的严格次小生成树的题目了。
我们先求一遍最小生成树,然后树上倍增求得所有点到它的 \(2^i\) 级祖先路径上的最大值和严格次大值。
对于每一条没有在最小生成树的边,判断两端点之间的边权最大值是否等于该边边权,若相等则用严格次小值更新答案,否则用最大值更新答案。
这一道题开始时就TLE,最后发现加边函数里面也正反加了两次。。。
具体实现见代码: