首页 > 其他分享 >P3206 城市建设 题解

P3206 城市建设 题解

时间:2024-07-19 21:29:21浏览次数:17  
标签:原图 log 题解 城市 最小 len 生成 P3206 边权

Statement

动态边权的最小生成树。\(n\le2\cdot10^4,m,q\le5\cdot10^4\)

Solution

法一:改边权相当于删一条边再加一条边. 考虑 LCT 维护最小生成树,加边好做,但删边比较麻烦,于是采用线段树分治,撤销一条边是好做的,cut 再 link 一下就行了. \(O(n\log n\log q)\),常数较大.

法二:两个结论:已知原图的一个边集 \(S\),

  • 把 \(S\) 所有边权设为 \(-\inf\),记此时原图的最小生成树的不属于 \(S\) 的边的集合为 \(T\),接下来 \(S\) 每条边无论边权取何值,原图的最小生成树还包含 \(T\).

    简洁证明:\(S\) 边权的改变只会使 \(S\) 中被选上的边变少,而一条边被选入 \(T\) 当且仅当它连接了两个之前从未连通的连通块,容易发现 \(T\) 中的这些边的连接作用是即使 \(S\) 中的边也无法替代的,所以必须被选上.

  • 把 \(S\) 所有边权设为 \(\inf\),在原图中找出最小生成树,记不在树边上的非 \(S\) 边的集合为 \(T\),接下来 \(S\) 每条边无论边权取何值,原图的最小生成树不包含 \(T\).

    简洁证明:\(S\) 边权变小只会让 \(S\) 加入的边变多,假如 \(S\) 中一条边加入,考虑 LCT 维护最小生成树的过程,被替换的一定是树边,也就是非树边一定不会反而成为树边.

考虑如何把两个结论用起来:

还是把修改看成一次加入和删除,发现按结论,加边可能可做,但删边是显然困难的;再考虑线性扫一遍处理询问的过程,发现一个询问前面的所有修改都已经应用,而它后面的所有修改还未应用;再往右扫一个,发现难点在于我们无法知道当前最小生成树形态。这启发我们按时间分治.

设当前处理的操作区间为 \([l,r]\),此时该区间内的边我们不确定,但其他边我们都确定了;说具体点就是 \([1..l-1]\) 内的边权已被修改,\([r+1,q]\) 内的边权还未修改,但 \([l,r]\) 内的修改将要处理,还不知道这些边的修改情况。这时假如我们往左走,右半部分就被确定;假如往右走,左半部分就被确定。现在的问题变成了求加入一些边后的最小生成树.

考虑上面两个结论:第一个告诉我们已确定的边中有一些是一定被选的,这样可以先把这些边组成的连通块缩点,算出边权和;第二个告诉我们可以删除一些无用的边. 假如我们在进入 \([l,r]\) 时已经得到这样简化后的图,该区间的长度为 \(len\),估计一下边和点的量级:

对于第一个操作,最多 \(2\cdot len\) 个点不能被缩,此时 \([l,r]\) 组成的边集形成 \(len\) 个连通块;故点数是 \(O(len)\);而第二个操作保证了边与点的量级同阶,故可以直接暴力加边 Kruskal,注意还要维护这个简化后的图,即还要缩点、删边.

缩点用可撤销并查集,删边随便记录一下,就做完了,注意递归到底时要把该操作进行了,即更改该边权值、输出答案.

然后做完了,若 Kruskal 为单 log,\(T(n)=2T(\frac n2)+O(n\log n)=O(n\log^2n)\).

标签:原图,log,题解,城市,最小,len,生成,P3206,边权
From: https://www.cnblogs.com/laijinyi/p/18312417

相关文章

  • 07-19 题解
    07-19题解B思路实质:有一个完全图,删掉一些边,然后在图上找一棵生成树但是图的边数是\(n^2\)级别的,极其稠密找生成树的步骤:从一个点开始,把与它相连的,不在同一连通块的点连在一起所以我们只要确保每次都能在尽量少的步数内找到一个合法点一共有n个点,确定一个点之......
  • 2024年牛客暑期多校训练营1 A题 A Bit Common题解
    题目的大意:首先,给你一个长度为n的序列A,A序列中每一个元素全都小于2m,并且大于等于0。A序列要满足存在一个非空子序列的与运算(&)和为1;输出这样的A序列有几个,最后对正整数q取模。(1<=n,m<=5000,1<=q<=109)输入只有一行n,m,q,输出包含一个整数。 题解:要满......
  • [NOI2007] 项链工厂 题解
    前言题目链接:洛谷;Hydro&bzoj。题意简述yzh喜欢写DS题!你要维护一个环:顺时针移动\(k\)位;翻转\(2\simn\);交换\(i\)与\(j\);区间覆盖;查询整个环有几个颜色段;查询\(i\simj\)有几个颜色段。题目分析平衡树板子啊,代码很好写,\(273\)行。但是为什么不使用线......
  • 1004:字符三角形 题解
    题目链接题目描述给定一个字符,用它构造一个底边长\(5\)个字符,高\(3\)个字符的等腰字符三角形。解题思路由于是字符,我们需要定义一个char类型的字符变量。第一行为两个空格和一个字符第二行为一个空格和三个字符第三行是五个字符输出即可ACCode#include<bits/stdc++.h......
  • 1003:对齐输出 题解
    题目链接题目描述读入三个整数,按每个整数占\(8\)个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。解题思路由于我们不知道这个数有多大,所以我们可以用printf自带的占位符%xd输出,其中x为位数。例:printf("%3d",a);就是占用3位。题目要求为\(8\)位......
  • 1001:Hello,World! 题解
    题目链接题目描述编写一个能够输出“\(\mathtt{Hello,World!}\)”的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。提示:“\(\mathtt{Hello,World!}\)”中间没空格。解题思路梦开始的地方\(Ver3.0\)没......
  • 暑假集训CSP提高模拟1考试题解
    A.Start洛谷原题链接一道大模拟,赛时20pts。教授の高光时刻-输出没加句号、空格。-C++向0取整。-DOUBLE没传递。--9操作成-1(复制粘贴导致的)。-负数位运算卡常。其实这题还是比较简单的,细节在题目中讲的很详细,跟着它说的去做就好了。我的方法是把每个玩家用一个结构......
  • [AGC012E] Camel and Oases 题解
    题目链接题目链接题目解法可能并没有那么难(?首先\(V\)的取值只有\(\logV\)种,即\(\lfloor\frac{V}{2^k}\rfloor\)称\(\lfloor\frac{V}{2^k}\rfloor\)为第\(k\)层,先预处理出每一层的极大连通区间我们可以把问题抽象成:每一层中选一个区间,要求覆盖\([1,n]\),且第\(0......
  • 2061:【例1.2】梯形面积 题解
    题目描述在梯形中阴影部分面积是150平方厘米,求梯形面积。解题思路简单的数学题。三角形面积公式为\(S=\frac{ah}{2}\),反推可得\(h=\frac{2S}{a}\),将\(a=15cm\)和\(S=150cm^2\)代入公式\(h=\frac{2S}{a}\),解得\(h=20cm\),又由于\(h_{▲}=h_{梯形}\),所以\(h_{梯形}=h_{▲}=20c......
  • 2024牛客暑期多校训练营2 B.MST(题解)
    题意给一张\(n\)个点,\(m\)条边的无向图,\(q\)次询问,每次询问给\(k\)个结点,问这\(k\)个结点的诱导子图(也就是原图中抽出这些结点,以及原图中这些节点之间有的边)的最小生成树是多少,不连通输出-1,保证\(q\)次询问加起来问到的点的数量\(\sumk_i\leq10^5\)。思路......