随笔分类 -  图论 - 网络流

摘要:题目大意:有三个集合 $P,Q,N$,P 与 N 集合之间存在一些有向边,N 与 Q 集合之间存在一些有向边。在三个集合中每个点最多只能利用一次的前提下,求最多能利用多少N 集合中的点,使得 $(p,n,q)$ 三个节点之间均有边相连。 题解:若只有两个集合,显然是二分图的最大匹配问题。对于三个集合 阅读全文
posted @ 2019-04-25 23:17 shellpicker 阅读(156) 评论(0) 推荐(0)
摘要:题目大意:二分图匹配裸题。 题解:用网络流进行处理。 找配对方案的时候,采用遍历二分图左边的每个节点,找到不与源点相连,且正向边权值为 0,反向边权值为 1 的边,输出即可。 代码如下 cpp include using namespace std; const int maxn=110; cons 阅读全文
posted @ 2019-04-25 20:22 shellpicker 阅读(156) 评论(0) 推荐(0)
摘要:题目大意:给定一个 N 个点的无向图,求至少删去多少个点可以使得无向图不连通。 题解:学习到了点边转化思想。 根据网络流的知识可知,一个网络的最小割与网络的最大流相等。不过最小割是图的边集,而本题则是删去节点。考虑将一个节点拆分成两个节点,即:入点和出点,对于同一个节点,在入点和出点之间的边权为 1 阅读全文
posted @ 2019-04-25 10:11 shellpicker 阅读(176) 评论(0) 推荐(0)
摘要:学会了 $Dinic$ 算法。 Dinic 算法的核心思想是多路增广。相比于 EK 算法,Dinic 算法利用了分层的思想,每次都寻找最短路径的增广路。时间复杂度为 $O(n^2m)$。 代码如下 cpp include using namespace std; const int maxn=1e4 阅读全文
posted @ 2019-04-24 21:34 shellpicker 阅读(146) 评论(0) 推荐(0)