一.原题链接:http://poj.org/problem?id=1966

二.题目大意:给你一个很裸的网络,让你判断最少去掉多少个点能够使其不连通。注意是无向图。

三.思路:枚举每个源点和汇点,求每次的最小割点集。取一个最小的,如果是完全图,每次求出的网络流肯定是INF,此时没有割点集,题目要求输出顶点数。

注意要枚举每个源点和汇点,不能固定源点,因为源点有可能是割点,题目测试数据有问题:

比如下图:

如果0为源点,跑最大流,出来的结果是INF,然而其实0就是那个最小割的点。

最小割点集合不懂建图的:详情请看http://blog.csdn.net/h992109898/article/details/51232440

四.代码:

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <cstdlib>using namespace std;const int INF = 0x3f3f3f3f,MAX_N = 55;class Dinic
{
public:struct Edge{int v, w, next;};int cnt, head[MAX_N*2], dist[MAX_N*2], s, t;Edge edges[MAX_N*MAX_N*2];void init(int is, int it){cnt = 0;s = is, t = it;memset(head, -1, sizeof(head));}void addEdge(int u, int v, int weight){edges[cnt] = (Edge){v, weight, head[u]};head[u] = cnt++;edges[cnt] = (Edge){u, 0, head[v]};head[v] = cnt++;}bool BFS(){int i, cur;queue <int> que;que.push(s);memset(dist, -1, sizeof(dist));dist[s] = 0;while(!que.empty()){cur = que.front();que.pop();for(i = head[cur]; i != -1; i = edges[i].next)if(-1 == dist[edges[i].v] && edges[i].w){dist[edges[i].v] = dist[cur] + 1;que.push(edges[i].v);}}return dist[t] != -1;}int DFS(int start, int curFlow){if(start == t)return curFlow;int i, minFlow = 0, v, temp;for(i = head[start]; i != -1; i = edges[i].next){v = edges[i].v;if(dist[start] == dist[v] - 1 && edges[i].w > 0){temp = DFS(v, min(edges[i].w, curFlow));edges[i].w -= temp;edges[i^1].w += temp;curFlow -= temp;minFlow += temp;if(0 == curFlow)break;}}if(0 == minFlow)dist[start] = -2;return minFlow;}int maxFlow(){int res = 0;while(BFS()){res += DFS(s, INF);}return res;}
}G;bool edges[MAX_N][MAX_N];
int edgeNum, nodeNum;int netFlow(int s, int t)
{G.init(s + nodeNum, t);int i, j;for(i = 0; i < nodeNum; i++){G.addEdge(i, i + nodeNum, 1);for(j = 0; j < nodeNum; j++)if(edges[i][j])G.addEdge(i + nodeNum, j, INF);}return G.maxFlow();
}int main()
{//freopen("in.txt", "r", stdin);int i, j, u, v, res;while(~scanf("%d%d", &nodeNum, &edgeNum)){memset(edges, 0, sizeof(edges));for(i = 0; i < edgeNum; i++){scanf(" (%d,%d)", &u, &v);edges[u][v] = edges[v][u] = true;}res = INF;for(i = 0; i < nodeNum; i++)for(j = 0; j < nodeNum; j++)if(!edges[i][j] && j != i)res = min(res, netFlow(i, j));if(res == INF){if(!nodeNum || !edgeNum && nodeNum != 1)printf("0\n");elseprintf("%d\n", nodeNum);}elseprintf("%d\n", res);}return 0;
}

POJ1966 Cable TV Network相关推荐

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

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

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

    题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通. 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通, ...

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

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

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

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

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

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

  6. poj 1966 Cable TV Network

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

  7. [POJ 1966] Cable TV Network

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

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

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

  9. vue 匹配键盘输入_vue如何监听键盘事件中的按键?

    poj1966 求顶点连通度 Cable TV Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4563   ...

最新文章

  1. 按计算机的地位划分计算机网络可分为,2010年全国自考计算机网络基本原理模拟试卷(三)及答案...
  2. 转载:Ununtu下中文乱码解决方案
  3. (JAVA学习笔记) 关于数据类型的一些扩展-面试时经常问到的问题
  4. Linux(四) 用户、用户组
  5. Java 8 - Interface Default Method接口默认方法
  6. 批量替换文件夹下所有文件的内容
  7. SubSonic框架使用图解
  8. ICCV2021 | 最新ICCV2021论文抢先看,附全部下载链接!ICCV2021下载
  9. 《深入理解 Spring Cloud 与微服务构建》第六章 服务注册和发现 Eureka
  10. css实现垂直居中(+水平居中)
  11. Android 使用SQLiteDatabase操作SQLite数据库(二)
  12. C#把文字转换成声音
  13. 数组做函数参数的退化问题
  14. Java开发 明华usbkey_UsbKey开发文档
  15. Linux日文教程,Ubuntu日语、法语输入法的设置
  16. Solaris adsl上网
  17. IT行业可以做什么副业?
  18. c java gs_Java基础-gs(垃圾回收)
  19. 超快速!10分钟入门Keras指南
  20. 热带地区数据中心需要太阳能发电,而不是自然冷却

热门文章

  1. HTML+CSS简单应用实例——购物网站的制作(五)
  2. esxi虚拟化服务器端口聚合,配置ESXi的端口聚合.docx
  3. 原生js实现二级伸缩菜单
  4. 计算机配件算固定资产吗,计算机和收款机属于固定资产还是低值易耗品?
  5. Ubuntu18.04设置1位数简单密码(三十二)
  6. 【微博关注】小白软件管家
  7. 如何在Centos7系统挂载nas1存储
  8. 微软史上最惨程序员——一句话错失$20,000,000美元
  9. c# 未能找到类型或命名空间名称“ManagementClass”(是否缺少 using 指令或程序集引用?)
  10. 嵌入式Linux初学者眼中的世界