随笔分类 - 图论--网络流
摘要:"传送门" 这个博弈类似放骨牌,参见 "这道题" 所以就可以黑白染色之后跑二分图最大匹配,其中的不必匹配的点就是答案 这些点是什么呢,$yy$ 一下发现貌似就是残余网络中与 $s$ 或 $t$ 在同一个强连通分量的点? 还要特判一下只有联通块只有一个点的点 cpp include using nam
阅读全文
摘要:"传送门" 最小割树 算法 初始时把所有点放在一个集合 从中任选两个点出来跑原图中的最小割 然后按照 $s$ 集合与 $t$ 集合的归属把当前集合划分成两个集合,递归处理 这样一共跑了 $n − 1$ 次最小割 可以证明图中任意一对点之间的最小割的数值都包含在这 $n − 1$ 个数值当中 把每次求
阅读全文
摘要:题面 "传送门" Sol 网络流辣 枚举每个点的最优匹配,然后只建最优匹配的边跑网络流 下一个点的图中,保证上一个点只连了最优匹配的边 直接整个图复制过来 然后二分答案一个点向上跳多少 和上面一样建图$check$ cpp include define RG register define IL i
阅读全文
摘要:题面 一张图分为两部分,左右都有$n$个节点, $A_i A_{i+1}$连边,$B_{i} B_{i+1}$连边,容量给出 有$m$对$A_i B_j$有边,容量给出 两种操作 1.修改某条$A_i A_{i+1}$的边的容量 2.询问从$A_1$到$B_n$的最大流 $n,mA_{i+1}$的边
阅读全文
摘要:"题面戳我" Solution 一般这种有两种选择的题都可以转化成最小割来做 所以我们先把所有的代价累加,求最小损失 考虑第一二种代价,分S,T连就好了。。。 连完你会发现,第三种怎么连??? 要求在同一块儿的损失,怎么用连边表示?? ~~这个时候只能Orz Zsy大佬了~~ 不同类 相邻 的格子
阅读全文
摘要:"题面戳我" Solution 一般这种题就转化成最小割做 把最大收益转化成最小损失,先把所有收益加入ans 考虑建图,设S集合为选文的,T为选理的 单个选的比较简单,就直接连就好了: 直接令容量(S,x)=选文科的收益,(x,T)=选理科的收益即可。 那么两个一起选的怎么连? 设两个人x,y,他们
阅读全文
摘要:"题面" 这个题很有意思啊。。。 其实是道最大流板子题,只连byx会赢的边,S向byx连,另一个连T。。。 注意有长者时连的边加上同方mogician的个数。。。 还要注意mogician可以无限续命,也就是他使长者+1s,自己不会 1s ~~那太棒了~~ cpp include define IL
阅读全文
摘要:~~然而这是一道网络流。。。~~ 如果满足Bob,使总费用最大: 设最大流的每条边流量(不是容量)为w[i],分配到每条边的费用为p[i],最大流量为wmax,p[i]的和为P 那么显然w[i] p[i]的和小于等于wmax P 证明: $$wmax P = \sum wmax p[i]......
阅读全文
摘要:S向地球连k的边,每天每个地方由上一天连INF边,每天月亮向T连边 枚举天数获取每天飞船的位置,由上一天的位置向这一天连满载的边 跑到人都送完位置,在合适的时候(玄学)break输出无解 # include <stdio.h> # include <stdlib.h> # include <iost
阅读全文
摘要:又是套路啊 黑白染色,S,T连不同色的,求最小割,用总和-最小割即为答案 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <string.h> # include <math.h> # define ll
阅读全文
摘要:套路啊 棋盘黑白染色,S连黑,白连T,黑白间根据骑士的走法连边,求出最小割 最大独立集=点数-最小点覆盖;最小点覆盖=最大流=最小割 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <string.h>
阅读全文
摘要:最大权闭合子图:等于正边权 - 最大流(最小割) 我的理解 最大收益就是要求最小损失,那么用最小割模型(别问我是怎么想到的) S向实验连边,表示割掉这条边,把实验割给T会有损失 T向配置连边,表示割掉这条边,把配置割给S会有损失 跑出的最小割(最大流)就是损失 # include <stdio.h>
阅读全文
摘要:枚举放的球,先假设新建柱子,拆成两个点,第一个点连S,表示后面还可以放;第二个连T表示放到其他柱子上;再枚举放过的数和它是否组成完全平方数,枚举的数的第一个点向它的第二个点连边,表示这个球可以放到其他球上,容量都为一 每次跑最大流出来的表示会消掉的柱子个数,如果此时球-消去的比n大则break输出答
阅读全文
摘要:题面 二分后用网络流判定 S->人,流量为二分的mid 人->比赛,流量为1 比赛->T,流量为1 输出方案只要判断a就可以了 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b)
阅读全文
摘要:最小割 让相邻的最小割上的点层数差小于等于d,也就是大于d时S,T仍然能相通 那么可以从下面d层向上面相邻的点连容量为INF的边 表示相邻的最小割上的点层数差大于d时,还能走这条INF边回来,流其它的路到T,这样就强制要小于等于d了 # include <bits/stdc++.h> # defin
阅读全文
摘要:费用流+最大流 先一遍最大流 再所有边扩容,新加节点限制扩容量k # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) # defin
阅读全文
摘要:裸的最小割然而我还是太菜了,没看见有零的格子,WA了两遍 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) # define Co
阅读全文
摘要:题意 一共有P个牧场.由C条双向路连接.两个牧场间可能有多条路.一条路也可能连接相同的牧场.牛棚坐落在牧场1. N (1 <= N <= P) 只奶牛打来了求救电话,说她们的农场没有被摧毁,但是已经无法到达牛棚. 求出最少可能有多少牧场被摧毁. 求最小割 没有被摧毁的连INF 注意这里的是点,要拆成
阅读全文
摘要:网络流 一个点拆成两个,注意要把某一类边连反过来 这样才能保证有限制 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) # def
阅读全文
摘要:最小割 代码 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) # define Copy(a, b) memcpy(a, b,
阅读全文

浙公网安备 33010602011771号