题目链接

题意翻译
电视电缆网络的继电器之间的连接是双向的。如果任意两个继电器之间都连通,那么这个网络就是连通的,否则不连通。特别地,一个空网络或只有一个继电器的网络是连通的。
定义一个有n个继电器的网络的安全指数f为
如果不管移除几个继电器,网络都连通,f=n
使网络不连通至少要移除的继电器数
给出t(t≤20)个网络,求每个网络的安全指数(每个网络的继电器数≤50)。

枚举两个不直接连通的点 S 和 T ,求在剩余的 n−2 个节点中最少去掉多少个可以使 S 和 T 不连通,在每次枚举的结构中取 min 就是本题的答案。

运用点边转化技巧

把原来无向图中的每个点 x ,拆成入点 x 和出点 x′。在无向图中删去一个点⇔在网络中断开 (x,x′) 。对 ∀x≠S,x≠T\forall x \neq S,x \neq T∀x​=S,x​=T
连有向边 (x,x′),容量为 1 。对原无向图的每条边 (x,y) ,连有向边 (x’,y),(y’,x),容量为 +∞+\infty+∞(防止割断)。

因为原来要删点,那么与这个点相连的若干条边都要切掉比较麻烦,那么直接将点 xxx 转换为入点 xxx 和出点 x′x'x′ 并将他们连起来,这样在想要删掉x这个点的时候只需要将边x−>x′x->x'x−>x′这一条边删掉即可。
最小割中设置容量为 +∞+∞+∞ 的边具有“防止割断”的含义。

其他所有的相连的边都置为INF,标记不可割断,拆的是单个点自己和自己的入点和出点的边。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<math.h>
#include<cstring>
#include<queue>
using namespace std;typedef long long ll;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 100;
const int M = 5e4+7;int s1,t1,n,m;
int head[N<<1],ver[M],nex[M],edge[M],tot;
int a[N * N],b[N * N],deep[N<<1];inline void add(int x,int y,int z){//正边反边ver[++tot] = y;edge[tot] = z;nex[tot] = head[x];head[x] = tot;ver[++tot] = x;edge[tot] = 0;nex[tot] = head[y];head[y] = tot;
}inline bool bfs(){memset(deep,0,sizeof deep);queue<int>q;q.push(s1);deep[s1] = 1;//分层while(q.size()){int x = q.front();q.pop();for(int i = head[x];i;i = nex[i]){int y = ver[i],z = edge[i];//剩余容量>0才属于残量网络if(z > 0 && !deep[y]){//不只是更新deep数组,是在残量网络上更新deep数组q.push(y);deep[y] = deep[x] + 1;if(y == t1)return true;}}}return false;
}inline int dinic(int x,int flow){if(x == t1)return flow;int res = flow;for(int i = head[x];i && res;i = nex[i]){int y = ver[i],z = edge[i];if(z > 0 && (deep[y] == deep[x] + 1)){int k = dinic(y,min(res,z));if(!k)deep[y] = 0;edge[i] -= k;edge[i ^ 1] += k;res -= k;}}return flow - res;
}int main(){while(cin>>n>>m){for(int i = 0;i < m;++i){char str[20];scanf("%s",str);a[i] = b[i] = 0;int j;for(j = 1;str[j] != ',';j++)a[i] = a[i] * 10 + (str[j] - '0');for(j++;str[j] != ')';j++)b[i] = b[i] * 10 + (str[j] - '0');}int ans = INF;for (s1 = 0; s1 < n; s1++)for (t1 = 0; t1 < n; t1++)if(s1 != t1){memset(head,0,sizeof head);tot = 1;int maxflow = 0;for(int i = 0;i < n;++i){if(i == s1 || i == t1)//i是入点,i+n是出点add(i,i + n,INF);//防止被割断else add(i,i + n,1);}for(int i = 0;i < m;++i){add(a[i] + n,b[i],INF);//不能割add(b[i] + n,a[i],INF);}while(bfs()){int num;while((num = dinic(s1,INF)))maxflow += num;}ans = min(ans,maxflow);}if(n <= 1 || ans == INF)ans = n;cout<<ans<<endl;}return 0;
}

UVA1660 电视网络 Cable TV Network(网络流,最小割)相关推荐

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

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

  2. 【bzoj2521】[Shoi2010]最小生成树 网络流最小割

    题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...

  3. 【bzoj2132】圈地计划 网络流最小割

    题目描述 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土地是一块矩形的区域,可以纵横划 ...

  4. 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化

    题目链接: https://www.luogu.com.cn/problem/P1646 参考博客: https://siyuan.blog.luogu.org/solution-p1646 算法:网 ...

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

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

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

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

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

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

  8. P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)

    P4897 [模板]最小割树(Gomory-Hu Tree) 这个算法可以用来求解一个无向图上任意两点的最小割,具体过程就是每次选择两个点求最小割,然后在一个新图中这两个点连边,然后对于这两个点的连通 ...

  9. CodeForces 1517G Starry Night Camping(网络流最小割)

    CodeForces 1517G Starry Night Camping problem 洛谷链接 solution 这个平行四边形的脑洞我™真的长见识了 本题最离谱的要求就是:平行四边形的一条边平 ...

最新文章

  1. C#实现HttpPost提交文件
  2. python语言入门m-Python -m参数原理及使用方法解析
  3. JavaScript 入门基础 (八)
  4. 思科CCNA考试实验常用的命令
  5. Spring单例的线程安全性
  6. 友盟分享小程序_iOS分享微信小程序
  7. arrays中copyof复制两个数组_数据结构与算法(3)数组
  8. linux mysql 端口配置文件_linux虚拟机中各服务端口及配置文件路径
  9. 送几本~ 648页全彩+395张插图 机器翻译 扛鼎之作
  10. 蓝桥杯 ALGO-87 算法训练 字串统计
  11. css如何改变横线<hr/>标签的颜色
  12. CentOS 7.x 默认防火墙 yum install firewalld
  13. python全套教程大全-千锋出品全套python视频教程,400大全集,你了解吗?
  14. 拓端tecdat|R语言逐步多元回归模型分析长鼻鱼密度影响因素
  15. 精通JavaScript?关于JavaScript的内存与性能问题,你又了解多少呢?
  16. 解读微信第三方平台-代小程序开发
  17. Unity 使用AVProVideo插件加载并下载视频
  18. PDF文件怎么编辑,如何删除其中一页
  19. Python调用cmd
  20. window10快捷键

热门文章

  1. 精简易懂,30 分钟学会 SVD 矩阵分解,很强!
  2. 121. Best Time to Buy and Sell Stock
  3. SpringMVC基础及应用-李守红
  4. 区块链共识机制及其迭代
  5. Mysql分页关联查询优化
  6. AndroidUI 视图动画-旋转动画效果 (RotateAnimation)
  7. eclipse中jboss启动时50s错误提示
  8. 【Linux 驱动】第九章 与硬件通信
  9. 改变人生的32句励志名言
  10. php读取大文件某行内容,php读取大文件最后几行数据的实现代码