【题解】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 初赛」最小公倍树

做过,但是印象不多。


完全图,所以跟图的形态关系不大。

有直接倍数关系的可以直接忽略较大值。

能不能想办法继续缩小边的范围?

\[\text{lcm}(a,b)=\dfrac {ab}{\text{gcd}(a,b)} \]

感觉跟调和级数有关系。

(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

posted @ 2024-10-08 21:10  CloudWings  阅读(19)  评论(0编辑  收藏  举报