摘要: 传送! 这道题比较有思维难度。 首先考虑这么个事:树上有$m$个被标记的点,求使这些点连通的边集的最小总长度。 做法是把这些点按dfs序排序,然后求dfs序相邻的两个点的距离(包括第$m$个点和第1个点)。这些距离之和就是答案的二倍! 知道了这个后,这道题就好办了:对于加入或删除一个点,我们用set 阅读全文
posted @ 2020-10-03 15:33 mrclr 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 传送 翻译:Rikka有一棵包含$n(1 \leqslant n \leqslant 3 \times 10 ^ 5)$个节点的树,节点编号为$1$到$n$。树上也标记了$m(2 \leqslant m \leqslant 3 \times 10 ^ 5)$条简单路径,第$i$条路径连接$x_i$和 阅读全文
posted @ 2020-10-03 15:21 mrclr 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 传送! 首先有一个结论:树上三个点两两求lca,最多只会出现两个不同的点。 这个结论不难证明:对于两个点$A,B$和他们的lca,\(X\)。第三个点$C$只可能在$X$的子树内外,而这两种情况都只会使公共的lca数目最多增加1。 有了这个结论后,我们的集合地点就要选在另一个非公共的lca,$Y$上 阅读全文
posted @ 2020-10-03 14:53 mrclr 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 题目链接 翻译:一棵无根树,给出m条边,把这m条边连上,每次你能毁掉两条边,规定一条是树边,一条新边。问有多少种方案能使树断裂。 这题想一想就明白了:考虑每一条新边连接的两个点$x$和$y$,对于这两点间树上路径的边,如果没有和其他新边连成环,那么这条边删了后树就会断裂,否则就断不了。所以每一次我们 阅读全文
posted @ 2020-10-03 14:37 mrclr 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 知识补充 在求lca的时候,除了常规的倍增、RMQ、树剖以外,还有一种改良的倍增算法,效率是原来的一倍。 具体步骤是在dfs预处理倍增数组的时候同时维护两个时间戳$Tin$和$Tout$,分别代表dfs时进入该子树和离开该子树的时刻。 这样如果点$u$是点$v$的祖先,必然满足$Tin(u) < T 阅读全文
posted @ 2020-10-03 14:28 mrclr 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 我大概率会参加acm,所以这个博客可能就会复活了 更新 确实复活了。 阅读全文
posted @ 2020-10-03 14:09 mrclr 阅读(364) 评论(0) 推荐(0) 编辑