Loading

[CEOI 2025] boardgames

熟练掌握 LCT 后,这道题甚至可以直接 dp,我们只需要快速 check 一个区间是否合法。

考虑从左到右枚举右端点扫描线,直接想结论或者最大生成树太困难,我们考虑对于每个点找出所有路径中最大的最小值。这是 Kruskal 重构树的经典问题,但是注意到我们不是边权是点权,这是个更弱的问题,我们考虑一个贪心的过程,类似 dijkstra,每次找到一个当前 \(\min\) 最大的点去遍历,遍历时把没遍历过的点遍历,放入优先队列。

我们用边刻画转移发现这个过程本质上形成了一棵树。我们发现 LCT 是好维护的,但是限制不好维护,因为我们还不知道这棵树具体是什么,或者说它还比较丑,我们把限制挂在每个点上是极为复杂的。

考虑刻画一下这棵树,观察过程发现我们本质上是按照边权为 \(\min(u,v)\) 跑最大生成树,那么 check 一个区间我们就可以考虑使用点数减去边数等于 \(1\) 的技巧,对个 \([l,r]\) 合法当且仅当 \(r-l\) 减去边权大于等于 \(l\) 的数量为 \(0\),这个直接上线段树即可,线段树自然可以维护位置为最小值的 dp 值,所以直接 dp 都行,虽然我写的还是贪心。时间复杂度 \(\mathcal{O}((n+m)\log n)\)

posted @ 2025-09-30 15:14  lalaouye  阅读(11)  评论(0)    收藏  举报