USACO Section 4.2 Drainage Ditches - 复习网络流
2012-01-13 17:53
281 查看
回顾了下网络流~~本题就是赤果果的最大流~~~话说开始写裸的爆搜增广路超时了~~用了dinic才过的~~庆幸过了好几个月了还能马上把最大流写出来~~
Program:
/* ID: zzyzzy12 LANG: C++ TASK: ditch */ #include<iostream> #include<istream> #include<stdio.h> #include<string.h> #include<math.h> #include<stack> #include<map> #include<algorithm> #include<queue> #define oo 2000000000 #define ll long long #define pi (atan(2)+atan(0.5))*2 using namespace std; struct node { int x,y,c,next; }line[1001]; int n,m,_link[501],way[501],dep,MaxFlow,x,MinFlow,dis[501]; bool used[501],f; queue<int> myqueue; void EK(int p) { int k; if (p==n) { MinFlow=oo; for (k=dep;k>=1;k--) if (line[way[k]].c<=MinFlow) { MinFlow=line[way[k]].c; x=line[way[k]].x-1; } for (k=1;k<=dep;k++) { m++; line[m].x=line[way[k]].y; line[m].y=line[way[k]].x; line[m].c=MinFlow; line[m].next=_link[line[m].x]; _link[line[m].x]=m; line[way[k]].c-=MinFlow; } MaxFlow+=MinFlow; f=true; return; } used[p]=true; k=_link[p]; while (k) { if (!used[line[k].y] && line[k].c && dis[line[k].y]-dis[line[k].x]==1) { way[++dep]=k; EK(line[k].y); dep--; if (x) if (x!=p) return; else x=0; } k=line[k].next; } used[p]=false; return; } void BFS() { int i,k,h; for (i=1;i<=n;i++) dis[i]=oo; while (!myqueue.empty()) myqueue.pop(); memset(used,false,sizeof(used)); myqueue.push(1); dis[1]=0; while (!myqueue.empty()) { h=myqueue.front(); myqueue.pop(); k=_link[h]; while (k) { if (line[k].c && dis[line[k].y]>dis[h]+1) { dis[line[k].y]=dis[h]+1; if (!used[line[k].y]) { used[line[k].y]=true; myqueue.push(line[k].y); } } k=line[k].next; } } } int main() { freopen("ditch.in","r",stdin); freopen("ditch.out","w",stdout); scanf("%d%d",&m,&n); memset(_link,0,sizeof(_link)); int i,k,h; for (i=1;i<=m;i++) { scanf("%d%d%d",&line[i].x,&line[i].y,&line[i].c); line[i].next=_link[line[i].x]; _link[line[i].x]=i; } MaxFlow=0; if (n>1) while (1) { BFS(); f=false; memset(used,false,sizeof(used)); x=0; dep=0; EK(1); if (!f) break; } printf("%d\n",MaxFlow); return 0; }
相关文章推荐
- loj6001「网络流 24 题」太空飞行计划 最小割(最大权闭合图复习)
- USACO-Section 4.2 The Perfect Stall (二分图最大匹配[匈牙利算法[DFS]||网络流[Ford-Fulkerson]])
- 复习了下网络流,自己手动实现了两种增广路网络流
- USACO4.2 网络流模板题
- USACO Section 4.2: The Perfect Stall
- [USACO4.2]草地排水(网络流最大流模板)
- USACO Section 4.2 Cowcycles - 枚举~
- 【网络流】网络流复习
- USACO Section 5.4 Telecowmunication - 构图网络流,最小割
- 网络流的初步应用[USACO4.2]草地排水
- USACO 4.2 The Perfect Stall网络流解最大二分图匹配
- USACO4.2 草地排水(网络流最大流)
- USACO Section 4.2 Job Processing
- USACO 4.2 Drainage Ditches(网络流模板题)
- USACO Section 4.2 The Perfect Stall - 网络流求最大二分图匹配..
- 操作系统复习-4.2文件系统实现
- 【NOIp复习】网络流笔记
- 网络流【复习+总结】
- (网络流)最大流复习
- usaco 4.2 Drainage Ditches 网络流