野餐规划

先来转换一下题意:首先,所有点一定与公园连通,否则的话存在一个人到不了公园;其次一条边最多被经过一次,否则的话第一次经过的车可以在起点等着,等到第二辆车到,然后两辆车合为一辆车。综上,我们选取的边至少要有\(n-1\)条边,每选取一条边就将这条边的权值计算到答案中(如果一条边被选取了却不计算答案,那么就说明这条边没有被经过,也就是说去除这条边不影响答案,也就是只将经过的边加入到最终的图中),所以为了权值最小又为了连通,我们只用求MST即可

首先这里有个严谨的拟阵证明

然后来讲一下蓝书的做法

根据这道题目的题解的证明的做法,我们只需要证明每次删边都不会删除与\(1\)相关联的边就好了

利用数学归纳法

假设我们此时(设这个时候为\(T_0\))找到的非树边为\((1,a)\)(在之前所删除的边都是与\(1\)无关的边),然后就形成了一个环,假设这个换上除了\((1,a)\)这条边之外,权值最大的边为\((1,b)\)导致要删除\((1,b)\),也就是说长成下面这个样子

如果说\((1,b)\)的边权小于\((1,a)\),那么算法就结束了,所以假设\((1,a)\)的边权更小

此时考虑\((1,b)\)被加入的时候

假设\((1,b)\)是最开始加入的\(T\)条边中的一条边,那么显然就有\((1,a)\)的边权大于\((1,b)\)的边权,矛盾,所以\((1,b)\)只能是后面加入的;然而根据归纳假设,\((1,b)\)被加入的时候(设这个时候为\(T_1\))删除的一定是一条与\(1\)无关的边,也就是说某个连通块由于删边(设这条边为\(e\))被分成了两部分,那么这个时候有加入\((1,a)\)这条边更优,因为我们在\(T_0\)时加入\((1,a)\)后形成了一个环\(1->a->b->1\),由于每个操作都只会删除边而不会添加边,所以说\(T_1\)时加入\((1,a)\)\(1->a->b->1\)仍然存在,删除\((1,b)\)显然仍然可以从\(1\)走到\(a\)再走到\(b\),而在\(T_1\)时加入\((1,b)\)会形成一个环\(1->b->c->1\)(且\(e\)在这个环上,显然\(e\)\(b\)\(c\)之间),那么就说明在\(T_1\)时我们加入\((1,a)\)而不是加入\((1,b)\)仍然会形成一个环\(1-a>b->c->1\)\(e\)在这个环上,于是加入\((1,a)\)删除\(e\)就是更优的选择

综上得证

提一下,这道题目代码挺难写的,可以看一下

最后来说一下这道题目怎么用wqs二分做

由于wqs二分是恰好找\(s\)度点,所以必须分两种情况讨论(假设这个函数的极值点是\(x_0\)):

我们先直接求一遍最小生成树,那么\(1\)号点的度数肯定就是\(x_0\);如果\(x_0≤s\),那么这肯定是最优的答案;否则的话,根据凸函数的性质,\(1\)号点的度数一定恰好为\(s\)的时候最优,那么此时就可以用wqs二分了

posted @ 2024-02-07 14:10  最爱丁珰  阅读(3)  评论(0编辑  收藏  举报