随笔分类 -  { 图论 { 网络流 { 最小割 } } }

摘要:题目大概一个国家n个城市由m条单向边相连,摧毁每条边都有一个费用。现在你可以选择所给的f个城市中的若干个,每个城市选择后都有一定的价值,但首都1号城市必须到达不了你选择的城市,因为你可能需要摧毁一些边,这样你的获利就是选择城市的价值和减摧毁边的总花费。问,最大的获利是多少以及摧毁哪些边。 如此建容量 阅读全文
posted @ 2016-03-19 08:52 WABoss 阅读(340) 评论(0) 推荐(0)
摘要:最小点权覆盖就是,对于有点权的有向图,选出权值和最少的点的集合覆盖所有的边。 解二分图最小点权覆盖集可以用最小割: vs-X-Y-vt这样连边,vs和X部点的连边容量为X部点的权值,Y部和vt连边容量为Y部点的权值,X和Y是原二分图中的边容量为INF。 这一题建二分图是这样的:把原图中的点拆成两个点 阅读全文
posted @ 2016-01-12 19:44 WABoss 阅读(436) 评论(0) 推荐(0)
摘要:方法1:两遍最大流。一遍最大流后,把满流边容量+1,非满流边改为INF;再求最小割即为答案。 我大概想了下证明:能构成最小割的边在第一次跑最大流时都满流,然后按那样改变边容量再求一次最小割,就相当于再在那些 满流可能是属于最小割的边 中挑出最少的边形成ST割。 1 #include<cstdio> 阅读全文
posted @ 2015-10-11 10:53 WABoss 阅读(368) 评论(0) 推荐(0)
摘要:看了题解,自己大概想了下。 最小割唯一的充分必要条件是残量网络中所有点要嘛能从源点floodfill到要嘛能floodfill到汇点。 必要性,这是当然的,因为假设从源点floodfill或者从汇点反着floodfill得到的集合若不相补,那这就有两个最小割的方案,最小割不唯一。 充分性,首先这样就 阅读全文
posted @ 2015-10-04 19:52 WABoss 阅读(792) 评论(0) 推荐(0)
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1LL<<60) 7 #define MAXN 3333 8 #d 阅读全文
posted @ 2015-10-03 16:44 WABoss 阅读(199) 评论(0) 推荐(0)
摘要:把入侵者看作边,每一行每一列都是点,选取某一行某一列都有费用,这样问题就是选总权最小的点集覆盖所有边,就是最小点权覆盖。 此外,题目的总花费是所有费用的乘积,这时有个技巧,就是取对数,把乘法变为加法运算,最后再还原。 另外还可以从最小割的思路去这么理解: 每一行与源点相连,容量为该行的花费;每一列与 阅读全文
posted @ 2015-10-03 10:07 WABoss 阅读(592) 评论(0) 推荐(0)
摘要:把某点与某几点分开的最小花费,当然想到最小割。具体怎么建图,可以画个简单的情况,然后就清楚了: 0到1不受控制,建立0->1容量为INF的边; 1到0受在0一边的一个控制面板的控制,建立1->0容量为1的边。 1 #include<cstdio> 2 #include<cstring> 3 #inc 阅读全文
posted @ 2015-10-02 17:21 WABoss 阅读(193) 评论(0) 推荐(0)
摘要:形象生动的最小割。。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1<<30) 7 #define MAXN 阅读全文
posted @ 2015-10-02 16:34 WABoss 阅读(514) 评论(0) 推荐(0)
摘要:看了题解。当时也觉得用邻接矩阵挺好写的,直接memset;然而邻接矩阵不懂得改,于是就放开那个模板,写了Dinic。。 方法是,按字典序枚举每一条满流的边,然后令其容量减1,如果最大流改变了,这条边就是属于某个最小割;接下来一直重复下去,直到得到一个割边集,而它自然是字典序最小的。 我在每次某条边容 阅读全文
posted @ 2015-10-02 16:24 WABoss 阅读(686) 评论(0) 推荐(0)