欧几里得生成树 附洛谷1265

你只有非常努力才能看起来毫不费力。

https://www.luogu.org/problemnew/show/P1265

上面的洛谷链接就是一个欧几里得生成树,注意这道题目里面的第二个条件是不成立的!!!

一:什么是欧几里得生成树?(大概是这么个意思吧)

就是给你n个包含x、y轴的坐标,将这些点连成最小生成树,如此生成树就是欧几里得生成树。我们的目的是记录最小生成树上的总的路径和。

二:解题过程

接下来我就写下我自己求欧几里得最小生成树的一些历程:

1:kruskal行不行呢?对于这道题目不可以,因为是5005个点,那么要push进队列5005*5005-1条边,会MLE。开始自己打了一个kruskal就MLE了,难受。

2:然后那毫无疑问了,用prim。很多prim模板里面都是设一点为起点p,建立结构体。结构体里面存储的是一个点的序号以及这个点到源点p的最小距离,然后用优先队列进行维护。

3:但是最后我们要记录最小生成树上的路径和,该怎样处理呢?

  1. 好吧,一切从头开始。我们先从源点出发,将除源点外所有点都遍历一遍,将源点到下一个点j的距离保存在dis[j]里面。
  2. 然后用vis数组将源点标记为1;
  3. 我们再从还未标记(还没有以这个点为起点更新它周围的点的一个点)的点i里面找到dis[i]最小的那个。然后再用这个点更新那些没有被标记的点j。i到j的距离为len,if
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值