「Summary」2022-08-16 做题记录
怎么这么久都没写题解了?!
2022-08-16
$\mathbb {1416D}$
纯 YY
像极了另外一道题,这里指 棘手的操作 ,但是不一样,一个是加边一个是删边。
其实可以转化,把删边操作看成是加边操作从后往前做,现在要解决的问题就是将图上的查询通过 dfn 序转到序列上。具体而言,从后往前考虑每个操作,如果是删边就用并查集从后往前连,在连的同时,把图建出来,如果是查询,则需要记录这个连通块的链头,和此时的连通块大小。
之后可以把 dfn 跑出来,从前往后依次回答询问就好了。
$\mathbb{HDU6430}$
线段树合并板
板题没什么好解释的,注意要先加当前点的贡献,再合并儿子。
关于时间复杂度,因子个数一定在 $\log(v)$ 的级别里,所以没有问题。
$\mathbb{HDU5452}$
结论
也不能说就是结论,看到题发现其实并不好做,在于限制了树边只能割一条。
或许可以从限制入手,只割一条树边能把一个点从树上割下来就只能是叶子,很容易地可以得到割掉叶子需要 $deg_{u}$ 次,有没有比这个更优秀的做法呢?可以论证,在只割掉一条树边的情况下,如果割除两个连在一起的点需要 $deg_v+deg_u - 1$ ,这就已经没有只割掉叶子优秀了。
$\mathbb{CF983E}$
手要废了 /kk
树上路径的题一般都可以从单链的情况出发,即考虑这道题中有一个 $u$ ,往上跳到 $pre$ 的最小步数,看起来是个比较套路的树上倍增,记 $g_{i, j}$ 表示从第 $i$ 个点出发,往上面跳 $2^j$ 步能够到达的最小深度的点。
回到这个问题,就转化成两个点 $u,v$ 往 $lca(u, v)$ 跳总共需要的最小步数,乍一看,这不跟单链一样嘛,直接码码码,写完发现过不了样例 🤡。
因为我没有分类讨论。
考虑这几种需要单独处理的情况:
- 两个点都无法跳到 $lca$ ,判 $-1$
- 分别达到 $lca$ 的最后一条路是否是一条
为啥要判这个呢?因为有可能有一条路跨过 $lca$ 连接了两个结点,那么此时两个点只要有一个跳一下就行了。
怎么判捏?这个其实就是个二位数点,主席树搞一搞就行啦。
The End「Ô mon âme, n'aspire pas à la vie immortelle, mais épuise le champ du possible.」