图论好题集锦 (19/10/21)

前言:主要练了一些最短路,网络流,数据结构优化建图,感性理解了二分图 H a l l Hall Hall 定理


HDU 5503
N ( N ≤ 50000 ) N(N≤50000) N(N50000) 支球队,每两支球队之间都会有一场比赛,没场比赛胜利记1分否则记0分,给出这N支球队的分数,问能否构造出每场比赛的结果,使得最后的分数成立?
解:首先可以球队向原点连 a i a_i ai 的边,比赛向两个球队连边,跑网络流看合不合法
考虑将一个球队拆成 a i a_i ai 个点,比赛依次连边,将比赛作为 X X X 集合,球队作为 Y Y Y 集合
当且仅当存在完美匹配时数据合法
根据二分图 H a l l Hall Hall 定理, X X X 中的任意 k k k 个点,与 Y Y Y 中的点至少有 k k k 对联通时存在完美匹配
我们可以枚举 Y Y Y 中的 k 个球队,那么在 X X X 中会有 ( k 2 ) \binom{k}{2} (2k) 个点
那么对于这 k k k 个点,需要满足 ∑ i = 1 k a i ≥ ( k 2 ) \sum_{i=1}^k a_i\ge \binom{k}{2} i=1kai(2k) ,于是排序取最小的 a i a_i ai 即可


POJ 3613
f l o y e d floyed floyed 快速幂,最开始的矩阵表示 x x x y y y 经过一条边的最短距离,乘一次就相当于多走了一条边


BZOJ 3693
应该规到数据结构,但写都写了就算了
首先可以暴力 n 2 n^2 n2 建图判一下有没有完美匹配
根据二分图 H a l l Hall Hall 定理,对于任意区间 [ L , R ] [L,R] [L,R] 如果对包涵的区间的 a i a_i ai 求和
需满足 R − L + 1 ≥ s u m R-L+1\ge sum RL+1sum
显然只有在原区间左右端点上的 L , R L,R L,R才有用
于是转换为,对于任意区间 [ L , R ] ( L ∈ l j , R ∈ r i ) [L,R](L\in l_j,R\in r_i) [L,R](Llj,Rri),需要满足 ∑ k = j i a k ≤ R − L + 1 \sum_{k=j}^i a_k\le R-L+1 k=jiakRL+1
也就是 R ≥ s u m + L − 1 R\ge sum+L-1 Rsum+L1
r i r_i ri 排序,线段树对于每一个 l i l_i li 维护 m a x ( s u m + L − 1 ) max(sum+L-1) max(sum+L1)
考虑每次添加一条线段的影响,对于 l ≤ l i l\le l_i lli l l l a i a_i ai 的贡献
线段树区间加,区间 m a x max max 即可


BZOJ 2259
题意:一个序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an,每次从 i i i 跳到 i + a i + 1 i+a_i+1 i+ai+1,要求刚好跳到 n + 1 n+1 n+1,可以对 a i a_i ai修改,代价为修改的绝对值,问最小代价
完全看不出是最短路…
发现 i i i 跳到 i + a i + 1 i+a_i+1 i+ai+1 是免费的,等价于 i − − i + a i + 1 i -- i+a_i+1 ii+ai+1,建边权为 0 的边
调整考虑一个一个调整, i + a i + 1 − − − i + a i i+a_i+1 --- i+a_i i+ai+1i+ai 建边权为 1 的边
如果 i + a i + 1 > n i+a_i+1 > n i+ai+1>n,那么向 n + 1 n+1 n+1 连边权为 i + a i − n i+a_i-n i+ain 的边
求出 1 到 n + 1 的最短路即可
没想到最短路也有建模,将代价抽象到边,最短路即是最小代价,妙啊!


BZOJ 2143
挺妙的一道题
考虑我们不直接记录跳到哪,我们到一个点,如果要跳,就给它记一个"能量"
一个能量可以走一格,而要跳等价于能量加上 a i , j a_{i,j} ai,j
考虑如何处理不跳满的情况,发现可以让它自己不动
接下来就有两种做法,一个是每种能量建一层图,就可以无脑分层图
一种是 d p dp dp f i , j , k f_{i,j,k} fi,j,k 表示到 ( i , j ) (i,j) (i,j) 能量为 k k k 的最短路,类似 D i j s k t r a Dijsktra Dijsktra 用堆维护最大转移
枚举每个点为起点跑一次即可
转换的思想特别巧妙


BZOJ 2400
题意:有一些点的点权确定,你需要确定剩余点权,使整个图的权最小,图的权为相邻两点异或和的和
图权最小时需点权和最小
首先位与位是互不干扰的,按位处理
题目转换为,把点分为 0 / 1 0/1 0/1 集合,只有 0 / 1 之间的边有贡献
是一个最小割的模型
令原点为 1 集合,汇点为 0 集合,原点向这一位为 1 的连边,这一位为 0 的连向汇点
边权为 i n f inf inf,强制不能割
对于原图上的边 ( u , v ) (u,v) (u,v),连边 ( u , v , 1 ) ( v , u , 1 ) (u,v,1)(v,u,1) (u,v,1)(v,u,1),表示正反都可以割
求出最小割即是第一问
第二问怎么办,发现这样求出来后与 S S S 联通的已经是最小点集,也就是说 1 的个数最小
从原点开始 d f s dfs dfs 即可


UOJ 77
好题
首先,分配黑白,应该是最小割的模型
考虑先令答案为 ∑ ( b i + w i ) \sum (b_i+w_i) (bi+wi),要让减去最小割为答案
原点向每个点连边,边权为 b i b_i bi,如果割掉表示选白,此时不需要考虑为黑的限制
每个点向汇点连边,边权为 w i w_i wi,如果割掉表示选黑,此时要考虑限制
限制为对于任何满足条件的 j j j j j j 如果要选白,也就是割黑,就要额外付出 p i p_i pi 的代价
最小割建图的一个经典模型就是连一些为 i n f inf inf 的边强制选 / 不选
你要割黑是吧,老子让你只有割了黑就必须割 p i p_i pi,否则就让你娃跟汇点联通
容易想到先建一个虚点 i ′ i' i i i i i ′ i' i 连边权为 p i p_i pi 的边
你割黑就让你联通,等价于从 i 走到 j 走出一条增广路, i ′ i' i j j j i n f inf inf 的边即可
观察题目限制,想到主席树优化建图
有一个坑点是一个权值有多个点,主席树上的点要向这些点连边
我们不暴力连,向上一个叶子连即可


HDU 5420
想到了一道类似的题,不记得出处了
就是按深度建主席树,然后向 d f s dfs dfs 序区间 [ i n u , o u t u ] [in_u, out_u] [inu,outu] 连边
因为 [ i n u , o u t u ] [in_u, out_u] [inu,outu] 中没有在 u 之上的点,所以是对的
然后就是主席树优化建图,边数点数都是 n l o g n nlogn nlogn


NOI 2009 植物大战僵尸
最大权闭合子图模型
关于最大权闭合子图,就是说你选了一个点,它能到达的都必须选,问选出来的子图最大是多少
原点向点权为正的连边,点权为负的向汇点连边,边权为绝对值,原图上的边边权为 i n f inf inf,表示割不掉
点权为正的点权和 - 最小割即为答案,因为要么割正的,要么割负的,割正的表示不选这个点,要减掉
割负的表示选了这个点,同样要剪掉它的值
这道题就是这样一个模型,因为要打死一个植物,必须打死保护它的植物
有一个问题就是当存在环时,环和环保护的点是打不死的,于是可以将网络流的图反过来拓扑排序,只建标记的点即可


BZOJ 2654
已经玩烂的经典题
类似 d p dp dp 凸优化,可以将白边加上一个值,判断最后选出来的个数
如果多了,就把加的调小,小了就把加的调大,最后的答案就是生成树权值 -
有一个坑点:权值相同时优先选白边

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值