nyoj 489 哭泣天使 网络流 最大流 IASP
2012-11-08 20:22
519 查看
矩阵写的。。运行有点慢。。。邻接表老是超时。。。不知为何。。。先放吧。。。懂了在写。。。。
用天使矩阵的行对列匹配。、。。。可以建一个起点终点。。。。
用天使矩阵的行对列匹配。、。。。可以建一个起点终点。。。。
#include<stdio.h> #include<string.h> #include <iostream> using namespace std; #define INF 1<<29; int s,t; //s:源点 t:汇点 int m; //顶点数 int cf[605][605]; //残留容量 int flow; //当前最大流 int cf_path; //本次可增广的流量(本次增广路径的残留容量) bool flag; //本次增广路径是否找到 int vh[1000]; //各高度的顶点个数 int h[1000]; //各顶点的高度,又称为“距离标号”——到汇点距离的下界(边权值都为1) void sap() { flow =cf_path=s=t=0; flag=false; memset(cf,0,sizeof(cf)); memset(vh,0,sizeof(vh)); memset(h,0,sizeof(h)); } void find_path_sap(int cur) { if(cur==t) { flow++; flag=true; return; } int i; int minH=m*2; int tmp_cf_path=cf_path; for(i=0;i<=m;i++) { if(cf[cur][i]) { if(h[i]+1==h[cur]) { find_path_sap(i); if(h[1]>=m) return; if(flag) break;//此句不加会错、、、 } if(h[i]<minH) minH=h[i]; } } if(flag) { cf[cur][i]--; cf[i][cur]++; } else { vh[h[cur]]--; if(vh[h[cur]]==0) h[0]=m; h[cur]=minH+1; vh[h[cur]]++; } } int solve() { vh[0]=m; flow=0; while(h[0]<m)//h[1]保持<m,一旦增长到m,就不再存在任何增广路径 { flag=false; cf_path=INF; find_path_sap(s); } return flow; } void addEdge(int x,int y,int c) { cf[x][y]+=c; } int main() { //freopen("Input.txt","r",stdin); int mm,a; scanf("%d",&a); while(a--) { int cn,n; scanf("%d%d",&cn,&n); sap(); mm=cn+n+3; s=0; t=mm; m=mm; int i,cf=0,kf=0; for(i=1;i<=cn;i++) { int c; scanf("%d",&c); cf+=c; addEdge(0,i,c); for(int j=cn+1;j<=cn+n;j++) addEdge(i,j,1); } for(i=cn+1;i<=cn+n;i++) { int x; scanf("%d",&x); kf+=x; addEdge(i,cn+n+3,x); } if(cf!=kf) printf("Terrible\n"); else { int hs; hs=solve(); if(cf==hs) printf("Not Sure\n"); else printf("Terrible\n"); } } return 0; }
相关文章推荐
- (NYoj 489)哭泣天使 -- 网络最大流,关于网格的建图方法,Dinic
- NYOJ 489 哭泣天使(网络流)
- NYOJ 489 哭泣天使 最大流
- NYOJ 489-哭泣天使:最大流
- NYOJ 489-哭泣天使:最大流
- 《网络流学习笔记04 && NYOJ 489 哭泣天使(建边,超级源点和汇点)》
- nyoj 哭泣天使 最大流
- nyoj 489 哭泣天使
- nyoj489哭泣的天使
- NYIST 489 哭泣天使
- nyoj 223 Drainage Ditches 【网络流&&最大流】
- NYOJ 489 最大流 Dinic 算法
- NYOJ 742 —— 最大m段和 【区间DP】
- nyoj 1237 最大岛屿 河南省ACM2015年省赛B题
- HDU 3549 Flow Problem(网络流入门题-最大流的Ford-Fulkerson算法)
- Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流)
- [bzoj1497][NOI2006]最大获利_网络流_最小割
- Libre 6010「网络流 24 题」数字梯形 (网络流,最大费用最大流)
- nyoj 104 最大和
- 网络流(最大独立点集):POJ 1466 Girls and Boys