前言:主要练了一些最短路,网络流,数据结构优化建图,感性理解了二分图 定理
HDU 5503
有 支球队,每两支球队之间都会有一场比赛,没场比赛胜利记1分否则记0分,给出这N支球队的分数,问能否构造出每场比赛的结果,使得最后的分数成立?
解:首先可以球队向原点连 的边,比赛向两个球队连边,跑网络流看合不合法
考虑将一个球队拆成 个点,比赛依次连边,将比赛作为
集合,球队作为
集合
当且仅当存在完美匹配时数据合法
根据二分图 定理,
中的任意
个点,与
中的点至少有
对联通时存在完美匹配
我们可以枚举 中的 k 个球队,那么在
中会有
个点
那么对于这 个点,需要满足
,于是排序取最小的
即可
POJ 3613 快速幂,最开始的矩阵表示
到
经过一条边的最短距离,乘一次就相当于多走了一条边
BZOJ 3693
应该规到数据结构,但写都写了就算了
首先可以暴力 建图判一下有没有完美匹配
根据二分图 定理,对于任意区间
如果对包涵的区间的
求和
需满足
显然只有在原区间左右端点上的才有用
于是转换为,对于任意区间 ,需要满足
也就是
按 排序,线段树对于每一个
维护
考虑每次添加一条线段的影响,对于 的
有
的贡献
线段树区间加,区间 即可
BZOJ 2259
题意:一个序列 ,每次从
跳到
,要求刚好跳到
,可以对
修改,代价为修改的绝对值,问最小代价
完全看不出是最短路…
发现 跳到
是免费的,等价于
,建边权为 0 的边
调整考虑一个一个调整, 建边权为 1 的边
如果 ,那么向
连边权为
的边
求出 1 到 n + 1 的最短路即可
没想到最短路也有建模,将代价抽象到边,最短路即是最小代价,妙啊!
BZOJ 2143
挺妙的一道题
考虑我们不直接记录跳到哪,我们到一个点,如果要跳,就给它记一个"能量"
一个能量可以走一格,而要跳等价于能量加上
考虑如何处理不跳满的情况,发现可以让它自己不动
接下来就有两种做法,一个是每种能量建一层图,就可以无脑分层图
一种是 ,
表示到
能量为
的最短路,类似
用堆维护最大转移
枚举每个点为起点跑一次即可
转换的思想特别巧妙
BZOJ 2400
题意:有一些点的点权确定,你需要确定剩余点权,使整个图的权最小,图的权为相邻两点异或和的和
图权最小时需点权和最小
首先位与位是互不干扰的,按位处理
题目转换为,把点分为 集合,只有 0 / 1 之间的边有贡献
是一个最小割的模型
令原点为 1 集合,汇点为 0 集合,原点向这一位为 1 的连边,这一位为 0 的连向汇点
边权为 ,强制不能割
对于原图上的边 ,连边
,表示正反都可以割
求出最小割即是第一问
第二问怎么办,发现这样求出来后与 联通的已经是最小点集,也就是说 1 的个数最小
从原点开始 即可
UOJ 77
好题
首先,分配黑白,应该是最小割的模型
考虑先令答案为 ,要让减去最小割为答案
原点向每个点连边,边权为 ,如果割掉表示选白,此时不需要考虑为黑的限制
每个点向汇点连边,边权为 ,如果割掉表示选黑,此时要考虑限制
限制为对于任何满足条件的 ,
如果要选白,也就是割黑,就要额外付出
的代价
最小割建图的一个经典模型就是连一些为 的边强制选 / 不选
你要割黑是吧,老子让你只有割了黑就必须割 ,否则就让你娃跟汇点联通
容易想到先建一个虚点 ,
向
连边权为
的边
你割黑就让你联通,等价于从 i 走到 j 走出一条增广路, 向
连
的边即可
观察题目限制,想到主席树优化建图
有一个坑点是一个权值有多个点,主席树上的点要向这些点连边
我们不暴力连,向上一个叶子连即可
HDU 5420
想到了一道类似的题,不记得出处了
就是按深度建主席树,然后向 序区间
连边
因为 中没有在 u 之上的点,所以是对的
然后就是主席树优化建图,边数点数都是
NOI 2009 植物大战僵尸
最大权闭合子图模型
关于最大权闭合子图,就是说你选了一个点,它能到达的都必须选,问选出来的子图最大是多少
原点向点权为正的连边,点权为负的向汇点连边,边权为绝对值,原图上的边边权为 ,表示割不掉
点权为正的点权和 - 最小割即为答案,因为要么割正的,要么割负的,割正的表示不选这个点,要减掉
割负的表示选了这个点,同样要剪掉它的值
这道题就是这样一个模型,因为要打死一个植物,必须打死保护它的植物
有一个问题就是当存在环时,环和环保护的点是打不死的,于是可以将网络流的图反过来拓扑排序,只建标记的点即可
BZOJ 2654
已经玩烂的经典题
类似 凸优化,可以将白边加上一个值,判断最后选出来的个数
如果多了,就把加的调小,小了就把加的调大,最后的答案就是生成树权值 -
有一个坑点:权值相同时优先选白边