二分图基础:
最大匹配:匈牙利算法
最小点覆盖=最大匹配
最小边覆盖=总节点数-最大匹配
最大独立集=点数-最大匹配
网络流:
带下界网络流
最小割问题的总结:
*意义
1.加inf的边表示不能被割,通常用于体现某个点必须属于某个集合
连边(s,u,w)代表如果u不在s割的话需要付出代价w
2.连边(u,v,w)代表如果u在s割,v在t割需要付出代价w 但注意,如果u在t割,v在s割是不需要付出代价的。 那么如果连边(u,v,w)以及(v,u,w)则说明当u与v所属割不同的时候需要付出代价w
*技巧
0.当求一些最大问题时,常常用sum减去代价
这个代价要求最小,于是可以用最小割解决
1.两个点i,j属于不同集合时付出val代价
新建点k (s,k,val) (k,i,inf) (k,j,inf)
当vals,valt不同时通常要新建点
但当相同时,可以直接(u,v,w)(v,u,w)表示不在一个集合就付出w代价
例题:BZOJ1497,BZOJ2127,BZOJ1934
2.两个点属于同一集合付出val代价
这个时候通常图的性质是二分图。(求打脸
然后我们可以将两部点的性质翻转一下,即左部点连s表示选,右部点连t表示选。
所以转化后问题变为了第一个。且只需 (i,j,val) (j,i,val)
例题:BZOJ1976,BZOJ2132,BZOJ3275
有难度的题目:
SRM558 Div1 C
解法:
一个点拆成x1,x2,分别表示自己是否有石头,周围是否有石头
x1收益v-c,x2收益v,将可能的收益加起来,减去最小代价
若两者同时选,付出v的代价
若对于相邻格子x,y x2满足而y1不满足,付出代价inf
时间: 2024-10-17 20:17:18