题目描述:

给你一个无向图,问你最少删掉几个点,使这个图成不连通。

解题报告:

概念

(1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通,

  而去掉 K 个顶点后的图不连通则称 G 是连通的, K 称作图 G 的点连通度,记作 K(G) 试设计

(2)相应地如果至少去掉 K 条边使这个图不连通,则 K 成为图的边连通度

边连通度:

  为每条边赋权值为1,然后求确定一点作为源点,枚举此点外的每个点作为汇点求最大流。

  也可以用stoer_wagner算法求得无向图的最小割

点连通度:

  求一个给定的无向图的点连通度,可以转换为求边连通度,怎么转换就如下所示:

将点连通度转化为边连通度时怎么建图呢:

1 .构造一个网络 N

若 G 为无向图:

(1) 原 G 图中的每个顶点 v 变成 N 网中的两个顶点 v' 和 v" ,顶点 v' 至 v" 有一条弧(有向边)连接,弧容量为 1;

(2) 原 G 图中的每条边 e = uv ,在 N 网中有两条弧 e’= u"v',e"=v"u' 与之对应, e' 弧容量为 ∞ , e" 弧容量为 ∞

(3)A” 为源顶点, B' 为汇顶点

注意:弧是有向边

若 G 为有向图:

(1) 原 G 图中的每个顶点变成 N 网中的两个顶点 v’ 和 v” ,顶点 v' 至 v” 有一条弧连接,弧容量为 1

(2) 原 G 图中的每条弧 e = uv 变成一条有向轨 u'u"v'v" ,其中轨上的弧 u"v' 的容量为 ∞;

(3)A” 为源顶点, B' 为汇顶点

2 .指定一个源点 A" ,枚举汇点B',求 A" 到 B' 的最大流 F ,其中F最小的就是本题答案。

  注意在求出最大流=inf时说明图是强连通的,则需要去掉所有的点。

View Code

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;#define MAXN 100 + 5
#define INF 0xfffffffint n, m, f;
int flow[MAXN][MAXN];
int Edge[MAXN][MAXN];
int pre[MAXN];
bool mark[MAXN];//最大流模版,不解释了。
void max_flow(int u, int v)
{f = 0;while(1) {memset(mark, 0, sizeof(mark));memset(pre, 0, sizeof(pre));queue<int> Q;mark[u] = 1;Q.push(u);while( !Q.empty() ) {int cnt = Q.front();Q.pop();if(cnt == v) {break;}for(int i = 0; i < n * 2; i++) {if(!mark[i] && flow[cnt][i] > 0) {mark[i] = 1;Q.push(i);pre[i] = cnt;}}}if( !mark[v]) {break;}int minx = INF;for(int i = v; i != u; i = pre[i]) {minx = min(flow[pre[i]][i], minx);}for(int i = v; i != u; i = pre[i]) {flow[pre[i]][i] -= minx;flow[i][pre[i]] += minx;}f += minx;}
}int main()
{while(scanf("%d %d%*c", &n, &m) != EOF) {memset(Edge, 0, sizeof(Edge));int k = -1; //k为源点。if(n == 1 && m == 0) {printf("1\n");continue;}if(m == 0) {printf("0\n");continue;}for(int i = 0; i < m; i++) {//注意输入的格式,因为这快儿RE了很多次。while(getchar()!='(');int u, v;scanf("%d,%d)", &u, &v);//图的转换,方法上面以给出。Edge[u][n + u] = 1;Edge[v][n + v] = 1;Edge[n + u][v] = INF;Edge[n + v][u] = INF;if( k == -1) {k = n + u;}}int ans = INF;//枚举0-n的点到源点的最大流,ans为其中最小的。for(int i = 0; i < n; i++) {if(i + n == k) {continue;}for(int j = 0; j < 2 * n; j++) {for(int t = 0; t < 2 * n; t++) {flow[j][t] = Edge[j][t];}}max_flow(k, i);ans = min(f, ans);}//当ans == INF说明图是强连通的,所以要去掉所有的点。if(ans == INF) {printf("%d\n", n);} else {printf("%d\n", ans);}}return 0;
}

ps:这个题RE了好多次,输入是值得注意的地方,就是两条边之间有没有空格都行,所以一定要仔细读题。

转载于:https://www.cnblogs.com/-hsz/archive/2012/07/24/2607375.html

POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】相关推荐

  1. POJ 1966 Cable TV Network (最大流最小割)

    $ POJ~1966~Cable~TV~Network $ $ solution: $ 第一眼可能让人很难下手,但本就是冲着网络流来的,所以我们直接一点.这道题我们要让这个联通图断开,那么势必会有两个 ...

  2. POJ - 1966 Cable TV Network(最小割-最大流)

    题目链接:点击查看 题目大意:给定一张无向图,求最少去掉多少个点,可以使图不连通 题目分析:让图不连通,也就是让图分成两个部分,这样题目就转换成了最小割的问题了,不过最小割问题是要求最小割边,所以我们 ...

  3. [POJ 1966] Cable TV Network

    [题目链接] http://poj.org/problem?id=1966 [算法] 拆点 + 最小割 [代码] #include <algorithm> #include <bit ...

  4. poj 1966 Cable TV Network 顶点连通度

    题目链接 给一个图, n个点m条边, 求至少去掉多少个点可以使得图不再联通. 随便指定一个点为源点, 枚举其他点为汇点的情况, 跑网络流, 求其中最小的情况. 如果最后ans为inf, 说明是一个完全 ...

  5. poj 1966 Cable TV Network

    求删除最少的点使得图不联通 将每一个点拆分为i,i',连接i,i'为1,若原图中存在g[u][v] = 1,连接u'到v,容量为INF,连接u,u'为1,连接v,v'为1 枚举源点和汇点,求出最小的最 ...

  6. 【HDU - 3002】King of Destruction(无向图全局最小割,SW算法,模板题)

    题干: Zhou xingxing is the successor of one style of kung fu called "Karate Kid".he is falli ...

  7. 最大流最小割经典例题_最大流, 最小割问题及算法实现

    本博客采用创作共用版权协议, 要求署名.非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议. 由于博文中包含一些LaTex格式数学公式, 在简书中显示不好, 所以 ...

  8. Cable TV Network POJ - 1966 最大流最小割定理 点边转化

    最大流最小割定理 任何一个网络的最大流量等于最小割中边的容量之和 即最大流等于最小割 点边转化 节点可以拆为入点和出点 把点的属性添加到入点和出点之间的边上 图的边也可以分两截 在中间加一个节点 把边 ...

  9. UVA1660 电视网络 Cable TV Network(网络流,最小割)

    题目链接 题意翻译 电视电缆网络的继电器之间的连接是双向的.如果任意两个继电器之间都连通,那么这个网络就是连通的,否则不连通.特别地,一个空网络或只有一个继电器的网络是连通的. 定义一个有n个继电器的 ...

最新文章

  1. R语言 、Excel哪个更能胜任数据分析?
  2. appium python框架结构,GitHub - wyybingo/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...
  3. 问题:为命名空间,在此被用作类型和此项目作为引用添加将导致循环依赖项
  4. PowerShell因为在此系统中禁止执行脚本
  5. python之celery简单使用
  6. Java中利用socket实现简单的服务端与客户端的通信(入门级)
  7. 攻防世界-web-unfinish-从0到1的解题历程writeup
  8. Microsoft Desktop Player是IT Pro的宝贵工具
  9. 计算机网络与通信02339,4月全国高等教育自学考试计算机网络与通信试题及答案解析.docx...
  10. JEEWX微信开发更便捷,Ngrok 内网穿透利器应用
  11. c语言中变量的属性,C中的属性变量
  12. recurdyn和matlab联合仿真,基于RecurDyn与Simulink的液压破碎锤联合仿真与试验分析
  13. leetcode_sql_1,176,177
  14. tomcat日志中文乱码问题
  15. 绕过“请在微信客户端打开链接”如微师下载视频等。
  16. 怎么杀php源文件的木马,PHP一句话木马及查杀
  17. ⑦企业级zabbix监控 微信报警、邮箱报警、钉钉报警、全网最细
  18. HTML菜单中有关selected=true和setAttribute(“selected“,“selected“)的异同以及selected设置无法生效的问题解析
  19. sh: /node_modules/.bin/vue-cli-service: Permission denied
  20. 台式电脑点关闭计算机关不了,台式电脑关机关不了怎么办

热门文章

  1. 大量数据转移_大量数据
  2. 微信出现“已停止访问该网页”或“关于潜在的违法或违规内容”怎么办?如何获取被屏蔽的网页的网址?...
  3. Oracle的基本操作(一:子查询与常用函数)
  4. python中opencv中inrange用法_python-opencv中的cv2.inRange函数
  5. java培训要学习多久?
  6. java web 怎么用solr_使用web过滤器增加solr后台登录验证
  7. PostgreSQL:Java使用CopyManager实现客户端文件COPY导入
  8. WF4 Beta,RC版文章总结
  9. 快节奏的多人游戏同步 - 示例代码和在线演示
  10. caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片