抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

重来几次才能清楚,
每段岔路与每个事故,
每条没有尽头旅途……

https://www.luogu.com.cn/training/531947

能不能卷一点啊……

101 CF633F The Chocolate Spree

直接做。

102 POI2004 JAS | AGC009D

利用重心来做点分树看起来很不能做。

我们用 did_i 给树染色,其代表在点分树上的深度。其合法条件是,对于相同的 did_i,其路径上一定存在一个比它大的点。

由于答案是 O(logn)O(\log n) 级别,因此我们可以考虑一些暴力做法。设 fif_i 代表子树内未被匹配的 dd 值集合。这样可以来求出当前位置能填什么。代码

103 彼岸蔷薇

Portal.

做不出来还是有问题的啊……这种不断解剖问题,一步一步分析性质的能力还是要多练。

首先只需要看 (u,u)(u,u) 是否合法,然后每个 uu 可以贪心地 O(n+m)O(n+m) 检查。

先求出一组合法解 QQ,再进行调整。记 QQ 中 LCA 为关键点,根据性质,uQ,(u,u)u\in Q,(u,u) 不合法。

T(d)T(d) 表示关键点 dd 控制的子树,即在贪心过程中它新覆盖的节点,即 dd 的子树去掉其子树内所有关键节点的子树得到的连通块。cov(x)cov(x) 表示是谁覆盖(控制)了 xx

考虑一条路径 uvu\rightarrow v 对合法点的贡献:

  • LCA 是关键点。如果使用这条路径覆盖,那么在 u,vT(d)u,v\in T(d) 时,T(d)\{uv}T(d)\backslash\{u\rightarrow v\} 均可以被覆盖。
  • 不是关键点。此时 (u,v)(u,v) 必定跨过一个关键点 dd,然后 (u,v)(u,v) 的 LCA xxdd 的祖先。此时令 u,xu,x 不被同一个节点控制,那么 v,xv,x 必须要被同一个节点控制,否则 xx 不合法,而控制 uu 的点再往上找一个关键点就应该是控制 xx 的点。然后此时 T(d)\{ud}T(d)\backslash\{u\rightarrow d\} 合法。

这个东西很好实现,使用树上差分,将路径上的点和关键点 +1,只有当路径权值比关键点权值小的时候才合法。代码

104 P2664 树上游戏

考虑换根 DP。维护数组 axa_x 表示当前根 rtrt 确定之后,颜色 xx 对于 rti(i[1,n])rt\rightarrow i(i\in [1,n]) 的贡献之和。

换根时只需要维护在 xx 的子树中,cfa(x)c_{fa(x)} 的贡献即可。

105 CEOI2017 One-Way Streets

首先一个边双内部内部肯定无法确定,我们只需要判断割边。

边双缩点建立出树,一个限制 uvu\rightarrow v 表示强制钦定这条链上的方向。由于一定有解,因此直接使用树上差分维护即可。

106 AGC008F Black Radius

看上去怎么都得数重?排除掉全黑的情况,钦定我们在状态相同的时候,只数那个 dd 最小的。不难发现,这时对应的染色点是唯一的。

也即是说,设 f(u,d)f(u,d) 代表 uu 的大小为 dd 的邻域,那么 f(u,d)f(u,d) 被计入答案,当且仅当不存在与 uu 相邻的点 vv 使得 f(u,d)=f(v,d1)f(u,d)=f(v,d-1)。要不出现这种情况,应该满足以 uu 为根的次小深度子树深度 d1\ge d-1

由于有的点不可以取到,因此相当于它存在一个最小合法 dd,满足存在 d0d_0 使得 S(v,d0)=S(u,d)S(v,d_0)=S(u,d)。也就是说,dd 的下限为所有含有 11 的子树的深度的最小值。

评论

若无法加载,请尝试刷新,欢迎讨论、交流和提出意见,支持 Markdown 与 LaTeX 语法(公式与文字间必须有空格)!