最小点割数

给定一个无向图,源点S和汇点T,问最少删除几个结点能使S和T不连通。
使S和T不连通的算法我们知道有最小割,但是最小割是将边割掉,所以我们需要将求割点转化为求割边
我们知道如果在原图去掉一个结点,相当于去掉这个结点和它所连接的所有的边,所以可以将每个点拆成 入点和出点,中间连一条容量为 1 的边,如果这条边被割掉了,就相当于这个结点被删除了。S 和 T不能被删除,因此中间连接容量为INF的边。再将原图中的双向边变成容量为INF的边,求最小点割数也就变成了求 S-T 的最小割。
下面放一个模板题 “奶牛的电信”,的代码。(最后有题目链接)

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#define INF 2147483647
using namespace std;
struct t_Edge {int next;int to;int cap;
};
t_Edge edge[10001];
int N, M, S, T, a, b;
int head[500], deep[500], num_edge;
void add(int from, int to, int cap)
{edge[++num_edge].next = head[from];edge[num_edge].to = to;edge[num_edge].cap = cap;head[from] = num_edge;
}
int bfs()
{memset(deep, 0, sizeof(deep));deep[S] = 1;queue<int> q;q.push(S);while(!q.empty()){int u = q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v = edge[i].to;if(edge[i].cap>0&&!deep[v]){deep[v] = deep[u]+1;q.push(v);}}}return deep[T];
}
int dfs(int u, int flow)
{if(u==T) return flow;int res = 0;for(int i=head[u];i!=-1&&flow;i=edge[i].next){int v = edge[i].to;if(edge[i].cap!=0&&deep[v]==deep[u]+1){int newflow = dfs(v, min(flow, edge[i].cap));edge[i].cap -= newflow;edge[i^1].cap += newflow;flow -= newflow;res += newflow;}}return res;
}
int Dinic()
{int res = 0;while(bfs())res += dfs(S, INF);return res;
}
int main()
{scanf("%d%d%d%d", &N, &M, &S, &T);memset(head, -1, sizeof(head));num_edge = -1;T += 100;for(int i=1;i<=N;i++){if(i!=S&&i!=(T-100)){add(i, i+100, 1);add(i+100, i, 0);}else{add(i, i+100, INF);    //不能把起点和终点割掉 add(i+100, i, 0);}}for(int i=1;i<=M;i++){scanf("%d%d", &a, &b);add(a+100, b, INF);add(b, a+100, 0);add(b+100, a, INF);add(a, b+100, 0);}printf("%d\n", Dinic());return 0;
}

最小点割集

在求出最小点割数的基础上,如果再问:具体去掉那些顶点可以使 S-T 不连通。这就是求最小点割集。
这个问题说实话我感觉有点疑惑。
在网上可以找到一个算法就是枚举所有点,将其割掉后再跑最大流,如果最后结果比此前求得的最大流小了,证明这个点就是符合要求的点的其中一个。正确性显然。因为如果这个点符合要求,你提前把他割掉了,结果需要割掉的结点肯定就少了一个。
但是为什么疑惑呢?因为这个算法实在太简单太好理解了。所以总觉得还有更 “优美”,或者说复杂度更低的算法,但又在网上找不到。。。很迷。。。

例题链接

洛谷P1345 奶牛的电信. (求最小点割数模板题)
洛谷P2944 Earthquake Damage 2. (最小点割数 + 一点点思维)
SP300 CABLETV - Cable TV Network. (枚举 + 最小点割数)
洛谷P1344 Pollutant Control. (此题难点在第二个问,需要一定的思维)
POJ 1815. (最小点割集)

[图论]---[网络流]---最小点割数/最小点割集相关推荐

  1. 网络流:最大流,最小割 基本概念及算法

    原文:http://www.cnblogs.com/Booble/archive/2011/03/04/1970453.html 参考:http://community.topcoder.com/tc ...

  2. 网络流之最大流和最小割

    最大流问题 最大流:给定有向图中每条边的最大流量(容量),求从源点到汇点的最大流量. 容量网络: 括号左边代表容量,右边代表流量. 残留网络:流网络中剩余可增加的流量 增广路:满足容量条件的一条流量不 ...

  3. 流网络的最小割问题c语言,网络流基础-最大流最小割定理

    最大流最小割定理,指网络流的最大流等于其最小割. 最大流指符合三个性质的前提下,从S到T能流过的最大流量. 最小割指符合割的定义,最小的割容量. 求最大流: 不断寻找增广路,计算能增加的最小流量,然后 ...

  4. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

  5. mysql最小费用最大流问题_图论-网络流之最小费用最大流问题

    n=5;C=[0 15 16 0 0 0 0 0 13 14 0 11 0 17 0 0 0 0 0 8 0 0 0 0 0]; %弧容量 b=[0 4 1 0 0 0 0 0 6 1 0 2 0 3 ...

  6. 一个n位的数,去掉其中的k位,问怎样去使得留下来的(n-k)位数按原来的前后顺序组成的数最小...

    例如 8314925去掉4个数,留下125最小,注意有前后顺序要求,要是没有顺序当然是123. 解决方案 贪心算法,在每次被访问的位置保证有最优解. 思路一 分析:求一共n位,求其中的m位组成的数最小 ...

  7. 键盘输入一个高精度的正整数n,去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最小

    键盘输入一个高精度的正整数n,去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的n和s,寻找一种方案,使得剩下的数最小. 如输入: 1785434 输出: 13 #includ ...

  8. 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(C++)(贪心法)

    算法经典题型12 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小.输入数据均不需判错.输出 ...

  9. php找零页面,JS实现找零张数最小

    这篇文章主要介绍了JS实现的找零张数最小问题,涉及javascript数学运算相关操作技巧,需要的朋友可以参考下. 完整代码如下: www.jb51.net 找零问题 var price = prom ...

最新文章

  1. 不允许使用抽象类类型的对象怎么办_Java基础——面试官:你来说说抽象类和接口的区别...
  2. Babel的配置和使用
  3. android100 自定义内容提供者
  4. 学计算机的你伤不起啊(转)
  5. Python——LOL官方商城皮肤信息爬取(一次练手)
  6. Python+pyplot绘制带文本标注的柱状图
  7. 【报告分享】神策数据:2020银行数字营销现状洞察.pdf(附下载链接)
  8. 夏侯南溪搭建目标检测模型——文件结构设计篇
  9. POJ NOI0101-09 字符菱形
  10. 《我的互联网方法论》读书笔记
  11. jQuery基础资料
  12. asp.net高校宿舍后勤管理系统
  13. js检查ie低版本浏览器,并跳转更新页面
  14. 【chp2】车万翔-自然语言处理:基于预训练模型的方法
  15. php后门 佛像,给千年佛像做了个CT,结果好吓人
  16. 【爬虫实战】利用scrapy框架爬取豆瓣图书信息
  17. 哈希表存储数据结构原理
  18. (10) IFC中的构件与空间结构(IfcRelContainedInSpatialStructure) (Industry Foundation Class)
  19. 怎么判断日出时间早晚_怎样知道当地每天几点日出?
  20. 被遗忘权的崩塌:当AI可以通过你的朋友了解你

热门文章

  1. linux脚本乘法运算符,shell算术运算
  2. 短信包对比 - 2021.5
  3. 面试题目:2个鸡蛋100层楼问题
  4. 样式的层级关系,选择器优先级,样式冲突,以及抽离样式模块怎么写,说出思路,有无实践经验
  5. PCB钻孔输出的一个简单动作,却带来工厂的命运转折
  6. 正宗、创新红烧肉全法
  7. 带你深入了解机器人视觉系统工作原理及其应用
  8. matlab 符号 积分法,MATLAB积分方法
  9. Android av sync机制
  10. 大数据同步利器: 表格存储全增量一体消费通道