牛客oj 习题11.6最短路径(并查集+Dijkstra+大数加乘比较)

 

 

题目链接:click here

题意:中问题,数据非常大

思路:

(1)、由于后输入的边一定要大于之前所有边的总和,所以用并查集解决多余边问题,若输入边的两点不在同一集合,则合并,代表这个集合内的边都是尽可能小的边,若输入边的两点已经在同一集合,则将边舍弃;

(2)、使用Dijkstra算法解决最短路问题,由于输入数据太庞大,所以用字符串存储以及运算,这里用到了大数加法、乘法、比较;

(3)、将求得的字符串转化为整形数字并输出后5位。

PS:这题昨天写了我一天,练到了好多知识点(并查集属于优化范畴)。越长的代码越是能锻炼自己的代码能力,也值了。只是这题因为不会改bug也看了些题解,其中有些人只用并查集+最短路没用大数就过去了,他们大多在输入边的时候就对100000取了模,我认为这样想是错误的。题目中说数值太大的以MOD 100000 的结果输出,没说输入的边太大就模100000,而且不管floyd还是dijkstra都要比较距离值,取模后很显然无法正确比较。然而他们还是过了,我认为是数据还是弱,弱到边的大小在小于100000的时候就全将节点合并

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值