冗余路径

对一个e-DCC来说,由于任意一条边都被包含在一个简单环中,所以任意两个点我们都可以构造出两条不相交的路径,如下

也就是把每一条边都替换成简单环的另一条路径

而对于位于不同的e-DCC的点显然是有必经边的

于是这道题目就转化成一个模型:给连通的无向图加边,使得无向图没有桥(即变成边双连通分量),最小化加边数

因为边双连通分量本来就没有桥,所以我们考虑对整个图求一遍边双连通分量(使用 tarjan 算法),然后将边双连通分量缩为一个点考虑。那么缩完点后得到的图一定是一棵树(因为图中不可能存在环)

然后要加的边的个数就是\(\lceil\frac{cnt}{2}\rceil\),其中\(cnt\)是图中度数为\(1\)的点数

先证这是下界

对于缩点之后的树,如果我们的操作没有涉及某个叶子(注意这里是叶子而不是度数为\(1\)的点),那么这个叶子一定就会一直待在这里直到我们某次操作涉及它;也就是说每个叶子都会被操作至少一次;如果根节点的度数为\(1\),那么根节点下面一小部分是一条链,在操作涉及根节点之前是不可能把这条链给合并了的(有可能把链的长度缩短),也就是说此时根节点也会被操作至少一次。综上,最小操作次数就是\(\lceil\frac{cnt}{2}\rceil\)

然后构造一下:

直接考虑节点数量在\(2\)以上的情况,我们任选一个度数大于\(1\)的点(一定找得到)作为根节点,然后这棵树就长这个样子:

每个子树都有若干个叶子,数目设为\(a_1\)\(a_2\),...,\(a_n\)(假设已经从大到小排好序了)

我们每次选择不同的子树的两个叶子连边(这么做的原因就是因为每次连边的点的LCA都是根节点),相当于把序列{\(a\)}中选两个数\(-1\)

先假设\(\sum_{i=1}^{n-1}a_i≥a_n\)

我们每次操作都让\(a\)中最大的数和最小的数进行减一(中间注意动态调整),我们先来论证这种操作在任意时刻都是可能的

\(a_n\)变成跟\(a_{n-1}\)相等之前,式子\(\sum_{i=1}^{n-1}a_i≥a_n\)恒成立,所以一定能从前\(n-1\)个数找到最小的与\(a_n\)同时减一;如果某时刻\(a_n=a_{n-1}\),如果此时\(\sum_{i=1}^{n-1}a_i>a_n\),那么再进行一次操作之后,\(a_{n-1}\)就会变成最大的,但是仍然满足“最大值不超过其余所有数的和”,就回到了之前的过程,否则的话此时有\(\sum_{i=1}^{n-1}a_i=a_n\),由于\(a_n\)是最大值且\(a_n=a_{n-1}\),所以\(\sum_{i=1}^{n-2}a_i=0\),也就是说前\(n-2\)个数全为\(0\),接下来的操作就是不断操作剩余的两个数就好了

由于数是有限的,最后要么全部变为\(0\),要么还剩下一个\(1\)

对于前面一种情况,此时就已经符合题意了,对于后面一种情况,此时在让这个叶子节点与根节点进行连边即可,不难算出添加的边数是以上结论给出的式子

如果\(\sum_{i=1}^{n-1}a_i<a_n\)怎么办?

此时,我们换根,让\(a_n\)所对应的子树的顶点作为根,直到对应的序列满足\(\sum_{i=1}^{n-1}a_i≥a_n\)

证毕

这种每次按照单位数量选两个减的好像都是让最大的和最小的减,然后中途动态调整

一模一样的

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