zcmimi's blog

arrow_back倍增共16篇文章

avatar
zc
2020-10-21 16:41:02

查看原题

点击跳转

解法一

最小权覆盖集 = 全集 - 最大权独立集

动态dp

只要把强制取点,不取点可以分别把点的权值改为正无穷与负无穷

解法二

倍增/树链剖分+树形dp

每次修改的两个点a,b构成一条链

可以链上连接的子树与链中间的点的结果不受修改影响,只有a,b的转移受影响,需要单独处理

那么我们可以把子树的答案都预处理出来,链中间部分可以用倍增或树链剖分维护

这样只需要处理a,b

avatar
zc
2020-10-15 22:15:41

查看原题

点击跳转

首先可以用并查集判断每个1操作是否有效

接下来很容易可以想到树剖+线段树优化建图

很可惜,出题人卡了这种大常数做法

考虑直接在树上倍增优化建图

和倍增lca差不多,一直向上连边

而每个点又拆为入点和出点

每次构建传送门时新建一个点,

连边时只需要[u_1,v_1]所在的块出点连接新建点,新建点连接[u_2,v_2]所在的块入点

详细见代码

avatar
zc
2020-06-14 13:07:00
查看原题

点击跳转

可以看出这是多颗基环树

分三种情况:

  1. x,y在不同的两颗树上

  2. x,y还没到达环就相遇了

  3. x,y的祖先在环上不同位置

avatar
zc
2020-06-03 12:34:00
查看原题

点击跳转

线性基搬到了树上

线性基是支持合并的

这题就是倍增暴力合并线性基

虽然O(\log^3_2n)的复杂度已经可以通过了,但是还有更优的方法

在倍增找出询问两点的lca,然后以rmq的方式合并+查询线性基,可以将复杂度降到O(\log^2_2n)

avatar
zc
2020-05-29 17:09:00
查看原题

点击跳转

矩阵乘法

这题倍增加速比快速幂快,可以节省很多多余的计算

二进制拆位后才能矩阵运算

avatar
zc
2020-04-06 22:06:00
查看原题

点击跳转

LCT动态维护最小生成树

维护链上的最大值和次大值

先找出最小生成树,然后枚举剩下的边,找出相差最小的,得出答案

这题还可以用kruskal生成树+倍增(或树剖)做,常数会小很多

avatar
zc
2020-03-01 11:57:00
查看原题

点击跳转

看题意想到了主席树和LCT

LCT套主席树可行,但是比较麻烦,我们用另一种方法

启发式合并+主席树(\mathcal{n \log^2 n})

每次将小的插入到大的,顺便更新倍增LCA

每个节点在父节点的基础上插入自身的值

即每个节点的主席树记录的是自身到根节点的路径

具体看代码

avatar
zc
2020-01-27 09:31:00
查看原题

点击跳转

avatar
zc
2020-01-26 22:12:00
查看原题

点击跳转

根据仙人掌图构建圆方树

若两个点的lca是原图的点,那么直接d_x+d_y-2\times d_{lca(x,y)}

否则就是两个点到环的距离加上两个点在环上的最短距离

avatar
zc
2020-01-18 22:40:00
查看原题

点击跳转

我们可以用倍增求出能控制某个点x的最远的点y的位置

应该将f_xy的点的答案+1

我们可以差分一下,

++ans_{f_x},--ans_{f_y}

然后从下加得到的就是当前点的答案

记得开long long

1/2
Search
search