CodeForces 827D 浅谈最小生成树性质解析及题目性质分析

本文详细分析了CodeForces 827D题目中关于最小生成树的性质,并探讨了如何利用最小生成树的特性进行高效解题。文章通过分析最小生成树上的边和不在最小生成树上的边,提出了利用树链剖分和线段树优化复杂度的方法,最终给出了一种复杂度为O(m)的解决方案。
摘要由CSDN通过智能技术生成

这里写图片描述
世界真的很大
今天考试时做了这道题,当时有点思路但是完全不敢写
还是要有勇于尝试的勇气,写着写着可能就写出来了
不要畏惧于去想,大多数情况下最后的代码都比想象的要简单
对于熟悉的问题要灵活掌握其性质,对于题目要敢于分析题目的独有性质
但是一定要仔细看题先:

description:

对于一个无向图的每一条边,你需要求出一个最大整数权值k,
使得如果把这条边的权值改为k(而其他边的权值不变),
整个图的任意一个最小生成树上都有这条边

input

第一行两个整数n,m
接下来m行每行3个整数u,v,w,表示u,v之间有一条边权为w的边

output

m行,每行一个整数,表示第i条边的最大边权

一下午的思考后,思路什么的还是比较明确了,先总结如下
首先题目很明确的要求了最小生成树,那么我们不管三七二十一,先求一颗最小生成树再说
那么就得到了两类边,一类是在最小生成树上的边,一类是不在最小生成树上的边

对于前者,我们想要知道可以使其一直留在最小生成树上的最大边权,对于后者,我们想要知道可以使其跻身最小生成树的最大边权
先考虑后者

对于一条不在最小生成树上的边,要想让它到最小生成树上,而树上两点之间的路径是唯一的,这条边的左右两点就会连通,就意味着之前最小生成树上使得这两条边连通的路径上的一条边会被挤下去,那么那条边会被挤下去呢,当然是里面边权最大的那条边了,
所以只要这条现在不在最小生成树上的边的权值变得比那条路径上权值最大的边权值小1,就能把他挤下去,而两点之间又必须连通,另一条路上被挤下去了一条,断了,所以这条边就断不开了,一定会出现在任意一个最小生成树上
也就是说,对于一条不在最小生成树上的边,其最大的权值就是最小生成树上使得这条边两端点连通的路径上边权最大的那条边的权值减一

对于前者,也就是在最小生成树上的一条边,考虑要想使得其从最小生成树上被挤下去,首先就是要使得由于这条边断开,左右两端点通过新的路径重新连通
而由于重新连通是需要新的边的而只所以这条边会被替代,只可能因为原本的边的边权比新的边的边权大,才会被替代
也就是说,要想这条边永远留在最小生成树上,就需要其值比所有能使得其左右两端在其断开后重新连通的边的值都要小,就是这些边的最小值减一

对于第一种情况,换句话说就是在最小生成树上求一条链的最值,可以用倍增来解决

对于第二种情况,枚举所有在最小生成树上的边,再去找所有能使得其左右两点重新连通的不在最小生成树上的边显然不现实,换个思路考虑,每条不在不在最小生成树上的边可以更新答案的范围,就是其左右两点在最小生成树上的一条链,相当于每次更新就是对于一条链上的答案全部对其取个min值,而这是树上的路径维护问题,显然可以用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值