poj 1966 Cable TV Network 顶点连通度-最大流
2015-09-08 09:23
441 查看
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; const int N=100+5; const int inf=1<<24; int g ,n,m; queue<int>Q; int maxflow(int s,int t) { int f ,a ,p ,u,v,ans; memset(f,0,sizeof(f)); ans=0; while(1) { memset(a,0,sizeof(a)); memset(p,0xff,sizeof(p)); while(!Q.empty()) Q.pop(); Q.push(s); a[s]=inf; p[s]=-2; while(!Q.empty()) { u=Q.front();Q.pop(); for(v=0;v<2*n;v++) { if(p[v]==-1&&f[u][v]<g[u][v]) { p[v]=u;Q.push(v); a[v]=min(a[u],g[u][v]-f[u][v]); } } if(p[t]!=-1) { v=t; while(p[v]>=0) { u=p[v]; f[u][v]+=a[t]; f[v][u]-=a[t]; v=u; } break; } } if(p[t]==-1) return ans; else ans+=a[t]; } } int main() { int ans,u,v,i,j; while(~scanf("%d%d",&n,&m)) { memset(g,0,sizeof(g)); for(i=0;i<n;i++) g[i][i+n]=1; for(i=0;i<m;i++) { scanf(" (%d,%d)",&u,&v); g[v+n][u]=g[u+n][v]=inf; } ans=inf; for(i=1;i<n;i++) ans=min(maxflow(0+n,i),ans); if(ans==inf) ans=n; printf("%d\n",ans); } return 0; }
相关文章推荐
- [转] Spring@Autowired注解与自动装配
- Linux重新学习--shell script--函数
- c# 正则表达式笔记
- 百度地图开发-调试通过-打包失败(授权Key不正确)
- 漫谈C指针第十一讲---参数的引用传递
- SOAPUI测试WSDL项目(三)---处理消息
- 后缀树与后缀数组
- uva 11991 Easy Problem from Rujia Liu?
- For the End User, the Interface Is the System
- Oracle执行时间与sql格式
- 无法创建连接器。 无法连接来自不同容器的可执行文件
- 每日学习总结<一> 2015-8-31
- getBoundingClientRect()
- enum的用法
- Hadoop 实例11 二次排序讲解
- SOAPUI测试WSDL项目(二)---操作和请求
- 获取map中元素的另一种方式,通过entrySet
- The Importance of Consommé
- jQuery工具函数
- Masonry介绍与使用实践:快速上手Autolayout