CSP-S2019 树上的数(并查集,dfs)

CSP-S2019 树上的数

n 树。n 排列卡片。i 卡片初始在 pi。每次删一条边可以交换两端卡片。删光边最后卡片 i 位置 Pi。求字典序最小 P

CODE

字典序最小果断贪,考虑卡片位置变化对限制带来的变化的本质。

首先压缩“删边顺序”。

一条边删了以后两边的相对顺序就不重要了。所以只在乎 dsu 序,也就是对于每个点来说 相连的边的删除顺序

每个卡片的位置变化都是一条至少有一条边的路径。考虑这条路径对 dsu 序带来的变化是怎么样的:

  1. 对于起点,起边是起点删的第一条边。

  2. 对于终点,终边是终点删的最后一条边。

  3. 对于路径上相邻两条边 i,j,共享端点 uu 的删边顺序中 ji 之后且删除顺序相邻。

因此每个点 u 的顺序用首删边 mi[u] 末删边 mx[u] 和若干个连续区间(可以用并查集维护,根是区间左端点,维护深度信息表示到左端点距离,维护区间大小)。

枚举卡片 i 每次从 pi 开始 dfs 找最小 Pi 即可。

posted @   Pizza1123  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩