题目链接:click here
题意:中问题,数据非常大
思路:
(1)、由于后输入的边一定要大于之前所有边的总和,所以用并查集解决多余边问题,若输入边的两点不在同一集合,则合并,代表这个集合内的边都是尽可能小的边,若输入边的两点已经在同一集合,则将边舍弃;
(2)、使用Dijkstra算法解决最短路问题,由于输入数据太庞大,所以用字符串存储以及运算,这里用到了大数加法、乘法、比较;
(3)、将求得的字符串转化为整形数字并输出后5位。
PS:这题昨天写了我一天,练到了好多知识点(并查集属于优化范畴)。越长的代码越是能锻炼自己的代码能力,也值了。只是这题因为不会改bug也看了些题解,其中有些人只用并查集+最短路没用大数就过去了,他们大多在输入边的时候就对100000取了模,我认为这样想是错误的。题目中说数值太大的以MOD 100000 的结果输出,没说输入的边太大就模100000,而且不管floyd还是dijkstra都要比较距离值,取模后很显然无法正确比较。然而他们还是过了,我认为是数据还是弱,弱到边的大小在小于100000的时候就全将节点合并