傻瓜都能看懂的网络流ek算法(poj1273)
2015-08-21 22:53
483 查看
各种姿势鲁了一遍,这种姿势绝对是最适合写网络流的
邻接表的写法支持重边,支持稀疏图,易于查找反向边,添加一个标记即可删边,又没有vector的繁琐
这里傻呼呼的用容量和流量两个东西,而不是用残量,本人觉得前者更容易理解且调试得多,也并没有多开什么内存*_*
邻接表的写法支持重边,支持稀疏图,易于查找反向边,添加一个标记即可删边,又没有vector的繁琐
这里傻呼呼的用容量和流量两个东西,而不是用残量,本人觉得前者更容易理解且调试得多,也并没有多开什么内存*_*
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<queue> using namespace std; const int maxn=208; const int INF=0x7f7f7f7f; struct fuck{ int u,v,flow,cap,next; }edge[maxn<<1]; int n,m; int dis[maxn],pre[maxn]; bool vis[maxn]; int head[maxn<<1]; int tol=0; void init() { tol=0; memset(head,-1,sizeof(head)); } void addedge(int u,int v,int w) { edge[tol].u=u; edge[tol].v=v; edge[tol].cap=w; edge[tol].flow=0; edge[tol].next=head[u]; head[u]=tol++; edge[tol].u=v; edge[tol].v=u; edge[tol].cap=0; edge[tol].flow=0; edge[tol].next=head[v]; head[v]=tol++; } int bfs() { queue<int> q; memset(vis,false,sizeof(vis)); int u,v,i; q.push(1);dis[1]=INF;pre[1]=-1;vis[1]=true; while(!q.empty()) { u=q.front();q.pop(); if(u==n) break; for(i=head[u];i!=-1;i=edge[i].next) { v=edge[i].v; if(!vis[v]&&edge[i].cap>edge[i].flow) { dis[v]=min(dis[u],edge[i].cap-edge[i].flow); vis[v]=true; q.push(v); pre[v]=i; } } } if(!vis ) return -1; return dis ; } int ek() { memset(dis,INF,sizeof(dis)); int max_flow=0,u,v,fl; while(1) { fl=bfs(); if(fl==-1) break; u=n; while(u!=1) { edge[pre[u]].flow+=fl; edge[pre[u]^1].flow-=fl; u=edge[pre[u]].u; } max_flow+=fl; } return max_flow; } int main() { int i,j,u,v,w; while(scanf("%d%d",&m,&n)==2) { init(); for(i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&w); addedge(u,v,w); } printf("%d\n",ek()); } return 0; }
相关文章推荐
- 通达OA 小飞鱼老师OA工作流设计课程教学网络公开课之HTML基础(一)
- 通达OA 小飞鱼老师OA工作流设计课程教学网络公开课之HTML基础(一)
- Power Network 网络流入门题)
- hdu1532Drainage Ditches裸的网络流
- iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全
- 黑马程序员_网络编程学习笔记
- Java基础-多线程下载(网络编程-多线程)
- 寒冰王座(http://acm.hdu.edu.cn/showproblem.php?pid=1248)
- 【线性规划与网络流24题 1】飞行员配对方案
- 小点滴——oracle 11g登陆不到控制台https://localhost:1158/em/的解决
- http tcp/ip socket之间的关系
- HTTP协议
- http://blog.163.com/gobby_1110/blog/static/29281715201352004329356/
- TCP/IP握手
- hdu 1532(poj 1273) Drainage Ditches (网络流·最大流)
- 对开源C++网络库简单应用总结
- UFLDL教程(四)---深度网络
- 简单封装的httpclient
- 【Android】网络通讯
- linux网络编程学习笔记之四 -----多-threaded服务器