【5.4 清北笔记】

1

树上每次询问两点间的最大流,支持花费a的费用增加一条流量为1的边,花费b的费用给一条边扩容,最多花费k元。

首先如果加边不必扩容贵,那么肯定只加边
分情况讨论,取max:
1.只加边
2.只扩容
3.先加边然后在这条边上扩容
1、3种情况很好处理,倍增求一下路径最小值就好了
对于第二种情况,我们可以二分流量扩成了多少,那么原来小于这个流量的边都应该被扩容到这个流量
问题变成了查询一条链上小于某个数的和。于是在树上建主席树。
由于主席树本身是一个二分结构,所以直接在主席树上二分就好了。看一下能不能扩容到mid,能就往右走,否则往左走。
复杂度 O ( n l o g n )

2

树上询问最远同色点的距离,带修改。(bzoj3456)

考虑点分治
带修改点分治怎么做?
发现每次只会修改一颗子树的值。
每颗子树维护黑色最大值堆,白色最大值堆,和的最大值堆

3

n个点无向联通简单图个数
h i 表示n个点构成的所有图的数量
f i 表示n个点构成的连通图的数量
g i 表示n个点构成的不连通图的数量
显然, f i = h i g i   ,   h i = 2 n ( n 1 ) / 2
考虑如何求 g i
假设我们固定一个点,枚举这个点所在的联通块大小,可得:

g n = i = 1 n 1 f i ( n 1 i 1 ) h n i

把组合数展开,合并一下:
g n = i = 1 n 1 f i ( n 1 i 1 ) h n i = i = 1 n 1 f i ( n 1 ) ! ( i 1 ) ! ( n i ) ! h n i = ( n 1 ) !   i = 1 n 1 f i ( i 1 ) ! h n i ( n i ) !

发现是一个卷积的形式
求fi
fi呈上hj会对fi+j产生贡献
分成两段
地柜计算左边 计算左边堆右边的贡献
合并 fft

4

点修改 换根 改链 询问子树最大值
(不基于dfs序)
询问子树最大值
就是它所有儿子的最大值取max和自己取max
维护一个堆
1.重儿子
2.轻儿子

对于2.维护一个堆,存它所有沿着轻边向下走的子树在最大值

对于1, 查询他的重儿子 递归往下做

修改一条路径 最多经过log条轻边,更改一下
2353

先手必胜当且仅当变数为偶数
一条边xy可以删除当且仅当xy度数奇偶性相同
也就是说xy项链的原来能删的边变得不能删了
不能删的边变得能删了
推一波狮子
假设总共有k条边能k-a-b
k-1-a-a+(d_p1-a-1)+(d_p2-b-1)
原来有奇数条边现在有偶数条边
所以有奇数条可删除的边必胜
任何一条不可删除的边一定链接一个基点和一个偶数点
一张图的度数和为偶数
所以一定有偶数个度数为奇数的点
折半搜索 fft

n个点m跳变的无向图 询问保留编号zailr的边的时候图中联通快的个数
按照询问区间的右端点排序
问题是删边以后可能有的边会加进来
考虑从右往左加边
这样从左向右删边的时候,如果是一条树边 那么删掉以后联通快一定加一
因为他后面没有可以替代他的边了
但是这样就处理不了第三个区间了
发现我们要做的其实是选择尽量靠右的边做一颗生成树
所以从左到右加边 找到还上编号最小的边 删去
要加进a要先删掉b a->b
联通快个数等价于求树边数量
树边数量等于区间内箭头指向左端点左侧的边的数量
上主席树

猜你喜欢

转载自blog.csdn.net/DT_Kang/article/details/80214990
5.4