最大流Edmondes-Karp,hlpp代码(2007-04-16 19:49)
来源:互联网 发布:雅思词汇书哪本好 知乎 编辑:程序博客网 时间:2024/05/21 11:13
搞了一下午总算写出来了= =...
刚开始学网络流,也不知道要怎么样优化,贴上随便写的代码~继续搞rtf...
------------------------Edmondes-Karp--------------------------------
- #include "stdio.h"
- #include "string.h"
- int rm[201][201];
- int m,n;
- int que[201];
- int pre[201];
- int qnum,pos;
- char sta[201];
- int ans;
- int fpath(){
- int i;
- memset(pre,0,201);
- memset(sta,0,201);
- pos=0;
- qnum=1;
- que[0]=1;
- sta[0]=1;
- pre[0]=-1;
- while(pos< qnum){
- for(i=1;i< =n;++i){
- if(rm[que[pos]][i]>0&&sta[i]==0){
- que[qnum]=i;
- pre[qnum]=pos;
- if(i==n){
- return qnum;
- }
- sta[i]=1;
- ++qnum;
- }
- }
- ++pos;
- }
- return -1;
- }
- void add(int num){
- int small=0x7fffffff;
- int pos=num;
- while(pre[pos]!=-1){
- if(rm[que[pre[pos]]][que[pos]]< small){
- small=rm[que[pre[pos]]][que[pos]];
- }
- pos=pre[pos];
- }
- pos=num;
- ans+=small;
- while(pre[pos]!=-1){
- rm[que[pre[pos]]][que[pos]]-=small;
- rm[que[pos]][que[pre[pos]]]+=small;
- pos=pre[pos];
- }
- }
- int main()
- {
- while(scanf("%d %d",&m,&n)!=EOF){
- memset(rm,0,201*201*4);
- int i;
- int s,d,r;
- for(i=0;i< m;++i){
- scanf("%d %d %d",&s,&d,&r);
- rm[s][d]+=r;
- }
- int tar;
- ans=0;
- while(1){
- tar=fpath();
- if(tar< 0){
- break;
- }
- add(tar);
- }
- printf("%d/n",ans);
- }
- return 0;
- }
------------------------------hlpp------------------------------------
- #include "stdio.h"
- #include < queue>
- using namespace std;
- queue< int> que;
- int ori[201][201];
- int rm[201][201];
- int high[201];
- int e[201];
- int m,n;
- void init(){
- memset(high,0,201*4);
- memset(e,0,201*4);
- while(!que.empty()){
- que.pop();
- }
- high[1]=n;
- int i;
- for(i=1;i< =n;++i){
- if(ori[1][i]>0){
- e[1]-=ori[1][i];
- e[i]+=ori[1][i];
- rm[1][i]=ori[1][i];
- rm[i][1]=-rm[1][i];
- que.push(i);
- }
- }
- }
- int fpath(int num){
- int i;
- int small=0x7fffffff;
- int spos;
- for(i=1;i< =n;++i){
- if(ori[num][i]-rm[num][i]>0){
- if(high[num]==high[i]+1){
- return i;
- }
- if(high[i]< small){
- small=high[i];
- spos=i;
- }
- }
- }
- high[num]=small+1;
- return spos;
- }
- void push(int s,int d){
- int max=ori[s][d]-rm[s][d];
- if(e[s]< max){
- max=e[s];
- }
- e[s]-=max;
- e[d]+=max;
- rm[s][d]+=max;
- rm[d][s]=-rm[s][d];
- }
- void deal(){
- int now;
- int psta;
- while(!que.empty()){
- now=que.front();
- que.pop();
- if(now==n){
- continue;
- }
- while(e[now]>0){
- psta=fpath(now);
- push(now,psta);
- que.push(psta);
- }
- }
- }
- int main()
- {
- while(scanf("%d %d",&m,&n)!=EOF){
- int i,s,d,r;
- memset(ori,0,201*201*4);
- memset(rm,0,201*201*4);
- for(i=0;i< m;++i){
- scanf("%d %d %d",&s,&d,&r);
- ori[s][d]+=r;
- }
- init();
- deal();
- printf("%d/n",e[n]);
- }
- return 0;
- }
- 最大流Edmondes-Karp,hlpp代码(2007-04-16 19:49)
- 最大流——HLPP算法
- 网络流最大流(代码)(Edmond-Karp算法)
- edmonds-karp求最大流
- 最大流算法---Edmond-Karp
- Edmonds-Karp法最大流
- 最大流-Edmonds-Karp算法
- 最大流Edmonds-Karp模板
- 网络最大流-Edmonds-Karp
- C++代码实现Ford-Fulkerson方法Edmonds Karp算法解决最大流问题
- 网络流最大流 Edmonds-Karp算法
- 网络流 最大流 Edmonds-Karp算法
- Edmonds-Karp算法,网络流最大流
- 最大流模板(Edmonds-Karp)
- 最大流 - Edmonds-Karp 增广路算法
- 网络最大流 — Edmond Karp算法
- 最大流算法模板 Edmonds—Karp
- 最大流问题 Edmonds-Karp算法
- POJ warmup 6 15th(2007-02-08 19:38)
- linux系统环境下轻松搭建CVS服务器
- java连接mysql数据库 代码
- [转]Trie树(2007-03-12 17:46)
- Python中的strip用于去除字符串的首位字符。
- 最大流Edmondes-Karp,hlpp代码(2007-04-16 19:49)
- 唉,PPLIVE考了个输出自己本身代码的程序
- 使用XFire+Spring构建Web Service(一)
- GDCPC2007的衣服:) (2007-04-17 23:39)
- POJ 300AC~~(2007-04-18 16:38)
- 美国总统候选人麦凯恩取笑女性,称其享受被猩猩强奸
- dotNET没用注册到IIS解决办法
- POJ1988--cube stacking(2007-04-18 17:01)
- MFC的DDX和DDV技术