网络流小练
A
题意:给定两棵树,形态不同,编号为
第一棵树有
第二棵树有
并且两棵树上的节点要么同时选要么同时不选
问是否存在一种构造方案,以及最大价值。
神奇的网络流:
首先左边一排第一棵树的限制,每个点连向它子树内的所有节点;右边同理
为了保证每个节点只能选一次,所以要拆点限制
但是这样会有问题:就是最大流不代表所有的限制都已经满足了
因为这个限制关系具有传递性,所以如果
所以维护一下每个子树中特殊限制的多少就可以了
B
给定
-
-
|S|\equiv 0\pmod 5 -
S$中的数对$5$取模后,每种数字的个数都是$n/5 -
第
i 个限制表示[1,X_i] 中要有Y_i 个n,m,Q\leq 10^4
首先弄出五个点表示取模的限制,连向所有模
然后考虑最后一个限制,其实和上一题几乎一样,只不过树上变成了区间上
同样限制关系在前缀上具有传递性,差分一下就好了
C
题意:给定一个
每一行、每一列弄出一个虚拟点,然后跑最小割就行了
D
有
每一天都有一个学生离开他所在的社团,并且每一天需要从每一个不为空的社团中选出一个学生组成代表团
一个代表团的权值为里面所有学生权值的
首先时间倒流,变为每天有学生加入
如果一个代表团的权值为
所以可以考虑动态一个一个权值加入,那么每个学生相当于边,连接权值和社团
只要当前最大流等于加入的权值点个数,那么就是合法的,让答案加
考虑到加入一个学生不会让答案变劣,所以每一天枚举的答案从上一天开始就行
注意到这只是一个二分图,并且每次需要判断一个点是否能找到一个匹配的点,所以直接用二分图匹配
E
题意:给定一个DAG,每条边有边权,给每个点标号。一条边
最小化代价,
可以用网络流,但只会状压
显然尽可能让每条边都是
那么问题就相当于:给每个点安排一个层数,一条边的贡献就是边权乘上两端点层数的差
设当前
那么如何计算贡献呢?如果一个点
如果在
F
题意:给定一个长度为
第
在任意时刻都可以扔掉书架上任意一本书,最小化花费
一流对多流模型:
考虑一本书在
在
因为要扔掉所以肯定越早越优,所以直接在
考虑到如果不扔掉,那么就要在书架上占位置
所以一开始先把所有的书买进来,然后对于一本书相邻出现的位置
所以直接连边
根据网络流的最优性,它就会选择是把这本书留在书架上减去价格,还是把它扔掉不占用位置
G
并不是网络流,而是一道伪装计数的以为是贪心的博弈论FWT
AT5800 [AGC043C] Giant Graph
H
I是这题的弱化版,所以只写这题
题意:给定一个数组,选出
问最多能取多少个元素,
每个点只能选一次,所以先拆开来,一个表示入一个表示出,中间放一条限制为
每个出点就要连向下一个差为
但因为到下一个不一定要选,也可以继续往下走,所以一个点拆成
跑一个最大费用流即可