nyoj 667 碟战 最小割(最大流)
来源:互联网 发布:中国第四人口普查数据 编辑:程序博客网 时间:2024/06/15 18:07
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=677
题意转化:将点0与所有的有间谍的点相连,则题意变为求点0到点n的最小割,直接套最大流EK算法~
下面代码顶点是从1~n+1
代码入下:
#include "stdio.h"#include "string.h"#include "queue"using namespace std;#define N 205#define INF 0x3fffffffint start,end;int route[N],dis[N];int map[N][N];int MIN(int x,int y){ return x<y?x:y; }int BFS(){ int i; int x,y; memset(route,-1,sizeof(route)); dis[start] = INF; queue<int> q; q.push(start); while(!q.empty()) { x = q.front(); q.pop(); for(y=1; y<=end; ++y) { if(route[y]==-1 && map[x][y]!=0) { route[y] = x; dis[y] = MIN(dis[x],map[x][y]); q.push(y); } } } if(route[end]==-1) return 0; return dis[end];}int EK(int n){ int x,y; int ans=0; int kejia; while(kejia = BFS()) { ans += kejia; y = end; while(y!=start) { x = route[y]; map[x][y] -= kejia; map[y][x] += kejia; y = x; } } return ans;}int main(){ int T,Case; int i,k; int n,m,p; int x,y; scanf("%d",&T); for(Case=1; Case<=T; ++Case) { memset(map,0,sizeof(map)); scanf("%d%d%d",&n,&m,&p); for(i=0; i<p; ++i) { scanf("%d",&k); k++; map[1][k] = map[k][1] = INF; } while(m--) { scanf("%d %d",&x,&y); x++; y++; map[x][y] = map[y][x] = 1; } start = 1; end = n+1; printf("Case #%d: %d\n",Case,EK(end)); }}
0 0
- nyoj 667 碟战 最小割(最大流)
- NYOJ-677-碟战(最大流最小割)
- nyoj 677 碟战(最大流最小割定理)
- 最大流/最小割
- 最大流最小割
- 最大流最小割
- 最大流最小割
- 最大流最小割
- poj 3469(最大流最小割)
- 最大流最小割(概念)
- Dinic模板(最大流最小割)
- dinic最大流模板(最小割)
- 最大流最小割定理
- 最大流-最小割简介
- 最大流最小割定理
- poj3308 最大流最小割
- 最小割转最大流
- 最大流和最小割
- html表单enter键按下自动提交
- 【Maven】Select Dependency 无法检索
- Android SQLite 插入优化
- 黑马程序员_反射
- Android控制ScrollView滑动速度
- nyoj 667 碟战 最小割(最大流)
- Web 应用程序学习笔记
- VC中CString和Char的互相转换
- Hadoop 开源调度系统zeus(一)
- c语言小题目(数字整除)。。。2014.5.23
- 进程间通信与线程间通信 .
- error LNK2019: 无法解析的外部符号
- 算法竞赛入门经典训练指南-4.1学习笔记
- JAVA List用法