06 2023 档案
摘要:先考虑直径的一些求法:最普遍的想法肯定是从点集中任意一个点开始 DFS 找到距其最远的点,再一遍 DFS 找到距离你找到的那个点最远的点。但是放在这个题肯定是不太行的。因此考虑一种更常用的求法:**合并**。更直观地说:我们定义树上一个圆 表示距离 点 的所有
阅读全文
摘要:为啥会有人觉得这是板子题啊/tuu 先对图边双连通分量缩个点,然后考虑对两条边分情况讨论: - 两个桥边,显然答案就是经过这两个桥的路径数量之和,排序取前两大的即可。 - 一个桥边加一个非桥边,答案是经过那个桥边的路径数量,显然桥边数量 肯定不用考虑这种情况,桥边数量 另外
阅读全文
摘要:令 ,等价于我们钦定一个排列 ,最小化 ,拿 减去之就是答案。 我们钦定一些 满足 $p_ik_iY.k;} }a[MAXN+5]; struct node{int ch[2],siz,key
阅读全文
摘要:good problem,bad round。 判断 YES 还是 NO 很trivial,就直接跑最大匹配看看是不是 即可。 如果是 NO,那么考虑 Hall 定理的证明过程构造即可。具体方法就是找到左部任意一非匹配点,在残量网络上 BFS 可以到达的点,那所有可以到达的左部点形成的集合就
阅读全文
摘要:首先先观察到一个非常浅显的性质:就是一个位置在序列中不是第一次出现,那么到这个位置的时候打出这个字符需要恰好一次按键,这是因为我们肯定在打出第一次出现这个字符的位置的时候已经知道哪个键对应这个字符了,到那个位置的时候直接敲一下就 ok 了。 也就是我们只用关心这个序列中出现了多少种不同的数,设为 $
阅读全文
摘要:交了整整 2 页,本来想用随机化卡过去的,后来发现我的实现跑得太慢就写正常做法了。 首先发现最优答案对应的四个点只可能有以下两种可能: - 间有边, 间有边,此时答案是 边权值加 边权值。 - 与 三个点间都有边,此时答案是三条边
阅读全文
摘要:显然无法用 polylog 的数据结构维护,序列分块也不行,考虑询问分块。每 个询问处理一次。 将这个询问中 操作涉及到的点设为“关键点”,那么容易发现,环上每一段以关键点结尾的链在这块操作的过程中始终保持不变,也就是说我们可以把它们缩在一起。 先预处理出每个块的增量对每组询问的
阅读全文
摘要:不知道怎么放到 div1F 的,感觉没啥亮点。 首先对于一条 到 的路径而言,它经过的点的编号一定是递增的,也就是说,如果我们将关键点大小排个序,那么答案就是相邻两点间最短路的和。删 / 加点造成的变化是 的,所以问题等价于,多次询问这张图中 之间最短路
阅读全文
摘要:先考虑一个平方的做法。我们先问出 :遍历所有元素,删掉它以后问一下剩余 个元素形成的集合,如果是 的倍数说明这个元素要么 要么 ,由于两个排列是镜像的所以任意钦定一个是 一个是 即可。删掉两个元素以后归纳问剩余部分也可以知道 $2,n-
阅读全文
摘要:数据结构好题。 先考虑如果 全是 怎么做。考虑一个非常特殊的状态:如果当前最靠左的舞蹈者跳一步就能跳到最靠右的舞蹈者的右边,那么这样的局面性质其实是非常完美的。因为容易归纳证明,这样的局面下,每一步最靠左的舞蹈者跳一步都能跳到最靠右的舞蹈者的右边,这样一来,如果维护出了初
阅读全文
摘要:值域倍增的小技巧
阅读全文