HDU 3549 最大流 EK算法 邻接表实现
来源:互联网 发布:2017昆广网络收费标准 编辑:程序博客网 时间:2024/06/05 11:14
EK就是BFS不断地找增广路,知道找不到为止,复杂度O(VE^2)
把边开小了 结果还回TLE 查了半天没查出来,边开成2倍就过了
#include<stdio.h>#include<stdlib.h>#include<math.h>#include<iostream>#include<string.h>#include<algorithm>#include<queue>#include<vector>#include<map>#include<set>#define inf 0x7fffffff#define eps 1e-8#define maxn 100#define maxe 2100using namespace std;struct node{ int v,next,cap;}edge[maxe];int n,m;int size,head[maxn];int pe[maxn],pre[maxn];//pe记录当前点是由那条边转移过来的 ,pre记录前驱void init(){ memset(head,-1,sizeof(head)); size=0;}void addedge(int u,int v,int cap){ edge[size].v=v; edge[size].next=head[u]; edge[size].cap=cap; head[u]=size++; edge[size].v=u; edge[size].cap=0; edge[size].next=head[v]; head[v]=size++;}int EK(int s,int t){ int maxflow=0; queue<int> q; while(1) //不停的找增广路 并进行增广 直到找不到增广路为止 { while(!q.empty()) //BFS q.pop(); memset(pre,-1,sizeof(pre)); q.push(s); while(!q.empty()) { int u=q.front(); q.pop(); for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; if(pre[v]==-1&&edge[i].cap>0) { q.push(v); pre[v]=u; pe[v]=i; } } if(pre[t]!=-1) //到达汇点 找到一条增广路 跳出BFS break; } if(pre[t]==-1) //没有找到增广路 跳出大循环 break; int aug=inf; for(int v=t;v!=s;v=pre[v]) //找到最小的容量 aug aug=min(aug,edge[pe[v]].cap); for(int v=t;v!=s;v=pre[v]) { edge[pe[v]].cap-=aug; //更新正向边 edge[pe[v]^1].cap+=aug;//更新反向边 } maxflow+=aug; } return maxflow;}int main(){ freopen("in.txt","r",stdin); int t; scanf("%d",&t); int ii=1; while(t--) { scanf("%d%d",&n,&m); int i,u,v,c; init(); for(i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&c); addedge(u,v,c); } printf("Case %d: %d\n",ii++,EK(1,n)); } return 0;}
- HDU 3549 最大流 EK算法 邻接表实现
- HDU 3549 Flow Problem(最大流+EK邻接表||邻接矩阵||dinic算法模板比较)
- hdu 3549 Flow Problem(最大流EK算法模板)
- HDU 3549 Flow Problem ( 最大流 -EK 算法)
- HDU 3549 Flow Problem【最大流模板题,EK算法】
- 邻接表--建图、spfa、EK算法 (转化为最小费用最大流)
- EK(BFS)求最大流的算法模板(邻接表)
- HDU 1532 最大流,EK算法
- vector实现最大流EK算法
- 最大流EK算法
- 最大流EK算法
- 最大流-EK算法
- 最大流-EK算法
- hdu 3549 Flow Problem (EK 最大流)
- 百练+EK算法模版+网络流邻接表形式
- 匈牙利算法 && EK(邻接表)
- HDU 3549 Flow Problem 最大流 最小增广路 EK算法 传说中的入门算法
- hdu 3549 Flow Problem 最大流入门 EK算法
- 死循环
- sprintf函数的用法
- IOS 应用处理单个和多个触碰手势分析
- XCode各版本对应的Mac OS操作系统版本
- IOS 应用UIWindow分析
- HDU 3549 最大流 EK算法 邻接表实现
- 运算符重载
- IOS 应用UIView分析
- 行の先頭(^)
- 行の末尾($)
- hdu 3183 A Magic Lamp
- 杭电ACM 2021 发工资咯:)
- GF 3.1.1 WebSocket support - cannot enable WebSockets
- poj 1436 Horizontally Visible Segments #线段树#hash#暴力枚举