2024.9.16 上午 总结(考 DS)

T1

我的做法:

  • 合并 -> 并查集。类似建 Kruskal 重构树。询问跑 LCA。

  • 注意并查集合并要把两个根都变成一个新点的儿子,而不是把一个作为另一个的儿子。(可能类似建 [边](?) Kruskal 重构树)

  • 要特判询问时 \(x = y\) 的情况(好像是输出 \(0\))。

lzh 的做法:

  • 连出一棵树,边的边权是 它是第几条边。每次询问问的是一条链上的 \(\max\)。用树剖做。

  • 其实也可以建这棵树的 Kruskal 重构树([边](?))来做。这个重构树好像就是我的做法里建出来的树。

xwb 的做法:

在某个询问的答案之前,这两个点是不连通的。而在这个答案及以后,这两个点就连通了。

对操作(加边)分块(块长是根号)。

记一下[每个块结尾处](???)的 fa 数组(前面的边都加上时)。通过这个找每个询问的答案是在哪个块里的。

对每个块里的询问一起处理。在每个块里暴力走,每走一步暴力对这个块里的所有询问判是否可行即可。

题解提到的整体二分做法(我的理解)

和 xwb 的做法一样,利用了“在某个询问的答案之前,这两个点是不连通的。而在这个答案及以后,这两个点就连通了”。

发现单调性,于是考虑二分。有多个询问,所以整体二分。

T2

以前水哥给我们讲课的时候有这道题。

把第二个排列里每个数换成它在第一个排列中出现的位置,跑最长上升子序列即可。

线段树优化。可能也可以树状数组优化。好像还可以用神秘[贪心 LIS 做法](?)。

T3

不太大的模拟。map 启动!

要注意细节和整体框架,要想清楚,[想清楚再写](?)。

注意

  • 倍增 LCA 根的 dep 应比 0 的 dep 大。

  • 注意倍增 LCA 的初值。(虽然好像好多都不用手动赋,直接全局就是 \(0\)

  • 不要忘了初始化下标为 0 的东西。

2024.9.16

posted @ 2024-09-16 14:18  huangkxQwQ  阅读(9)  评论(0编辑  收藏  举报