洛谷1111修复公路(并查集的应用)

修复公路 - 洛谷

并查集是一个什么样的东西呢,就是一个祖宗带着一堆孙子的问题,而若对应到图上,我们可以看到这样可以视为一个连通块的问题。

并查集有几个模板,几个基本操作。

我们可以合并集合,查询集合。

我们可以在基础并查集上加上一个维护其长度的代码,也可以做到一个使得并查集的距离被保存。

在这里不再详述。

回到题目。

给出 A 地区的村庄数 N,和公路数 M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)。

N个村庄,要求连通,很明显的并查集问题,但是我们也要考虑到一个关键问题,那就是最小时间。

最小时间应该怎么做到呢?

我们可以对每一个输入的村庄修建的时间进行排序,先将小时间的全部修好,每一次判断一下现在拥有的祖宗节点数,当祖宗节点为一时,这样的连通块就已经变成一个完美的集合,并且我们得到了一个最小的时间。

部分实现的难题。

对于x,y,t三者应该怎么排序呢?

用c++自带的sort自然没有错误,但是我们还不能移动x,y所以,我们可以用结构体来储存,只对时间进行排序。

因此,请铭记这一点,可以用结构体对指定关键字进行排序。

好吧,无话可说了。

代码&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值