随笔分类 -  图论-树-树链剖分

摘要:做这题的时候有点怂。。基本已经想到正解了。。结果感觉做法有点假,还是看了正解题解。。 首先提到简单路径上经过的点,就想到了一个关于点双的结论:两点间简单路径上所有可能经过的点的并等于路径上所有点所在点双的并,也就是说,在建一棵圆方树,方点表示所在点双里的最小点权,两个圆点之间的路径上所有方点的最小值 阅读全文
posted @ 2019-10-30 15:31 Ametsuji_akiya 阅读(178) 评论(0) 推荐(0)
摘要:首先同一个点双内部的加边肯定不影响。。所以先缩点成树,然后每次加一条边,这条对应的树上路径上所有边就都不是桥了,且每次操作独立作用,不相互影响(不过有可能本来一条边已经不是桥了又被标记了一次),所以每次相当对树链做一次链覆盖,统计未覆盖边。这个是链剖板子。。$O(N\log^2N)$ 1 #incl 阅读全文
posted @ 2019-10-25 07:34 Ametsuji_akiya 阅读(171) 评论(0) 推荐(0)
摘要:题意:一张图求每条边边权最多改成多少可以让所有MST都包含这条边。 这题还是要考察Kruskal的贪心过程。 先跑一棵MST出来。然后考虑每条边。 如果他是非树边,要让他Kruskal的时候被选入,必须要让他连的两个点$u,v$连通之前被选上,也就是说,必须得小于MST上$u,v$路径中的至少一条边 阅读全文
posted @ 2019-10-17 12:11 Ametsuji_akiya 阅读(142) 评论(0) 推荐(0)
摘要:跑一遍mst。对于非mst上的边,显然删掉不影响。 如果删边在树上,相当于这时剩下两个连通块。可以证明要重新构成mst只需要再加一条连接两个连通块的最小边,不会证,yy一下,因为原来连通块连的边权和已经最小化了,就不要动,如果换用两条以上的边,肯定不会更优。 所以问题就是断掉树边,找最小联通边。可以 阅读全文
posted @ 2019-09-26 10:07 Ametsuji_akiya 阅读(227) 评论(0) 推荐(0)
摘要:操作0,显然直接线段树解决。 操作1,瓶颈在于重叠的链只算一次。在线段树上来看,如果一个区间被覆盖了,那么只算这个区间,子树里面也就不管了。 考虑对节点打标记来表示是否覆盖。但是,如果统一打完之后,并不方便计算打上标记的点的和。明确目标,现在希望能覆盖很多小区间的一个大区间被打上标记之后用他来更新答 阅读全文
posted @ 2019-09-26 10:07 Ametsuji_akiya 阅读(141) 评论(0) 推荐(0)
摘要:一个几乎用不到的在线维护平面内线段关系的$O(nlog^2n)$结构。 阅读全文
posted @ 2019-09-23 20:57 Ametsuji_akiya 阅读(84) 评论(0) 推荐(0)
摘要:复习几乎考不到的树剖。维护min以及min个数,打set和add标记即可,注意set优先级优于add。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath 阅读全文
posted @ 2019-09-23 18:11 Ametsuji_akiya 阅读(197) 评论(0) 推荐(0)