反转 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\) 次操作最少需要倒掉几个水杯。
- 选择倒掉 \(i\) 号水杯,\(dp_{i, j} = dp_{i - 1, j} + 1\)。
- 对 \(i\) 号水杯进行操作,\(dp_{i, j} = dp_{x, j - 1}\),其中 \(x\) 表示满足 \(A_x \le \lfloor \frac{A_i}{2} \rfloor\) 的最小值。
树的颜色
我再研究研究这题还不会做。
浙公网安备 33010602011771号