反转 Dag 图

先读题,是要求最大值最小,不要读错了。

考虑二分答案,这种类型的二分最好先对边权排序,再二分哪个边是代价最大的。

证明:反转边和删除边本质是一样的。

假设当前图经过删边已变成 Dag 图,令 \(top_i\) 为点 \(i\) 的拓扑序。

依次去添边 \((u, v)\),如果 \(top_u > top_v\),则添加边 \((v, u)\),否则添加边 \((u, v)\),而新构成的图和原图的拓扑序相等,则意味着新图也是 Dag 图。

check:因为已证明反转边和删除便本质是一样的,所以可以删除二分的那些边,判断剩下的图是否是 Dag 即可。

歪脖子树

千万不要以为这题是纯数据结构题。

首先如果没有换根操作,那么直接用数据结构维护。

那么如果有换根操作,先认为根没有变化,如果询问 \(u\) 子树的最大值时,若现根在子树内,稍作思考可以想到在现根下的树的 \(u\) 的子树的最大值为 \(1 \sim N\) 的部分 - \(u\) 的儿子 \(v\) 的子树的部分。( \(v\) 是离现根最近的那个儿子。 )

倒水问题

观察到将 \(> \lfloor \frac{G}{2} \rfloor\) 的部分倒掉,稍作思考发现在一组数据内最坏至少进行 \(\lceil \log_{2} A_i \rceil\) 次操作。

先按 \(A_i\) 的水量进行排序。

考虑设计状态 \(dp_{i, j}\) 表示考虑前 \(i\) 个水杯进行 \(j\) 次操作最少需要倒掉几个水杯。

  1. 选择倒掉 \(i\) 号水杯,\(dp_{i, j} = dp_{i - 1, j} + 1\)
  2. \(i\) 号水杯进行操作,\(dp_{i, j} = dp_{x, j - 1}\),其中 \(x\) 表示满足 \(A_x \le \lfloor \frac{A_i}{2} \rfloor\) 的最小值。

树的颜色

我再研究研究这题还不会做。

posted on 2024-07-01 16:07  appear  阅读(13)  评论(0)    收藏  举报