【题解】Solution Set - NOIP2024集训Day47 最小生成树
【题解】Solution Set - NOIP2024集训Day47 最小生成树
https://www.becoder.com.cn/contest/5606
色
12min 没思路……
显然,可以证明的是最终的答案一定是一条边的长度。
(FAKE
考虑给这个无向图定向,如果我们能使每个点的出度平均,即 \(\dfrac mn\),那么很可能根号分治就是对的了。
想不到怎么定向。
(我在想什么,定了向也没用啊,始终修改之后还是需要双向的维护。
https://www.cnblogs.com/AWhiteWall/p/12522740.html
其实,结论可以更进一步:这条边一定在 mst 上。
Why?
- 如果答案边不在 mst 上,那么在 mst 上的这两个点之间的路径总长度一定大于等于这条边权,这样我们不如断开这个路径上的一条边,而连上这条边,从而构造出一个更优的 mst,矛盾!
(然后自己突然有个神奇的想法。
我们不妨把询问离线下来,然后去枚举每一条边,这条边可以产生贡献当且仅当两个端点颜色不同。
我们不妨把所有的颜色修改放在每个节点上,然后统计答案就行了,总共的复杂度应该是 \(O(q)\)。
https://www.becoder.com.cn/submission/2646602
有问题!一个菊花图,并且每次都修改中间那个节点,就直接卡掉了。😥
(cube 提供了一个非常神秘的随机赋权+根号分治做法。
考虑将 \(m\) 条边从小到大排序,然后按 \(\sqrt m\) 分块。我们要做的就是快速判断每个块内是否存在 \(c_u\ne c_v\) 的边。
考虑对每个块维护 \(\sum_i (c_u-c_v)\times val_i\),其中 \(val_i\) 是边 \(i\) 随机赋的一个权。
我们就是找到第一个该值不为 \(0\) 的块,然后在里面暴力就行了。
考虑维护这个值。
我们先求出每个点分别在 \(\sqrt m\) 块内的系数,然后对每个块依次改就行。
「THUPC 2022 初赛」最小公倍树
做过,但是印象不多。
完全图,所以跟图的形态关系不大。
有直接倍数关系的可以直接忽略较大值。
能不能想办法继续缩小边的范围?
感觉跟调和级数有关系。
(FAKE
把所有因子跟其倍数连边,然后想办法让取 mst 的时候,实点 \(\to\) 虚点 \(\to\) 实点的边权和为 \(\text{lcm}\)。
感觉怪怪的,有些虚点也不是必须要在 mst 上的,没前途的。
10min
其实远没有这么复杂。我们考虑去枚举这个 \(d=\gcd(a,b)\),我们只需要对每个集合 \(S=\{x|x=kd\}\) 内部连边,就一定能覆盖完 mst 中的所有边。注意这里 \(d\) 可能并不一定是真正的 \(\gcd\),但是可以证明在取最终 mst 的时候,对于同一对 \((a,b)\) 一定会去选取 \(d\) 最大的那条边,也即取到 \(\gcd\) 了。
对于一个 \(S\) 中,显然将所有的元素都连向 \(S_\min\) 是最优的,因为 \(\gcd\) 一样,我们显然要让乘积最小。
这样边数就是调和级数 \(O(n\ln n)\) 的了。
然后跑 kruskal 就行。
「CF1120D」Power Tree
做过,有印象。
看错题了,以为是给子树内所有点都 \(+v_i\)。😅
相当于一开始在每个叶子节点上面有一颗棋子,可以将棋子移动到她的祖先,要求最终权值和最小,并且移动路径不能有交。
从下往上考虑贪心,我们把子树中权值最大的棋子向上移动就行了。
https://www.becoder.com.cn/submission/2642715
只看第一问,这个暴力是对了(但是在这个随机数数据下,\(O(n\log^2 n)\) 显得异常优秀啊。
考虑启发式合并优化这个过程。(似乎比 dsu on tree 好写一点。
https://www.becoder.com.cn/submission/2643216
注意:一个点被其祖先替换掉的时候,和这个点等价的那些点也要 tag=0
。
尽力了,但是方案并集输出真的好 ex,遂摆烂。
https://codeforces.com/problemset/submission/1120/285139296
(并集大小只多了一个元素!!!一组 Hack
最小生成树的做法。
https://www.luogu.com.cn/article/z692g8r0
区间加转化为连边,还是挺妙的。
还有就是注意最小生成树,方案并集的输出。
「HNOI2010」城市建设
https://www.luogu.com.cn/article/zxqeaowk
两个 trick 见题解吧。
「BZOJ4808」马
一眼二分图。
棋盘黑白染色,显然不存在在同一种颜色格子中的两个马能够互相吃到,所以连边求最大独立集就行了。
3min(实际上是真的一眼,但是打字太慢了。/kk