最小生成树

Kruskal的优化:
Highways 这题为例
思路,点之间两两建边,利用kruskal和并查集,先连上已有的边(将边的两个端点放入一个并查集中),再将不同集合的边连接直到边数等于n
做题过程1:结构体2个(Point记录点坐标,Edge记录每条边的情况),优先队列(至今为止Kruskal用的好像都是这个?,每两个点之间建边,但是跳过在同意集合的两个点。其中建边的时间复杂度是O(n^2),KruskalO(nlogn),怎么看都不会超时的情况下,还是因为常数过大TLE了(黄色部分仍可优化)
每两个点之间建边for(int i = 1->n),for(int j = 1-> n)->for(int i = 1->n),for(int j = i + 1 ->n),虽然是无向图,但可只建立单向边缩短常数时间(538ms)
优先队列->sort:优先队列每进行一次pop()操作都要logn的时间,而sort总共只需一次logn的时间(538ms->254ms)
总结:1:保证答案正确的情况下,尽量建更少的边
2:用sort代替priority_queue

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值