P1967 [NOIP2013 提高组] 货车运输
一开始的想法和这篇题解一样。
我存询问是按点存,但是他是直接按照询问编号存。
我询问的处理不好,挂了,改成了最大生成树。
简单思考一下有了一个做法:二分答案,\(check(mid)\)表示能否通过权值大于等于\(mid\)的边,使\((a,b)\)联通,这样只有60分。
进而思考,考虑从大到小加边,动态维护连通性,这样第一次连通就肯定是答案。但是对于询问的处理不是很好,所以挂了。
因为只有不连通才会加边,所以这是一棵最大生成树。证明:如果不是树,就肯定有一个环,那么这个环上肯定有一条边,是在两个点已经连通之后加进去的,但是与代码矛盾了,所以肯定是一棵树。又因为加边方式,所以是最大生成树。
由于后面加的边越加越小,且树上两点之间只有一条简单路径,所以其实答案就是两点路径间的最小值。其实这个最小值就是上文第一次连通的边权。为什么呢?因为加边是从大到小的,两个点一直是分开的,直到最后一条边使其连通,这条边肯定就是最小值。
这就很简单了,用LCA即可,但是那位dalao的方法还是很好的。

浙公网安备 33010602011771号