POJ1273Drainage Ditches
2016-07-11 11:00
423 查看
链接:http://poj.org/problem?id=1273
题意:给定n条边和m个点的图,有边权。求从1到m的最大流量。
分析:学习网络流的第一题,dinic算法的裸题。
代码:
#include<map> #include<set> #include<cmath> #include<queue> #include<bitset> #include<math.h> #include<vector> #include<string> #include<stdio.h> #include<cstring> #include<iostream> #include<algorithm> #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; const int N=210; const int MAX=1000000100; const int mod=100000000; const int MOD1=1000000007; const int MOD2=1000000009; const double EPS=0.00000001; typedef long long ll; const ll MOD=1000000007; const int INF=1000000010; const double pi=acos(-1.0); typedef double db; typedef unsigned long long ull; int tot,u ,v[2*N],flow[2*N],pre[2*N]; void add(int a,int b,int f) { v[tot]=b;flow[tot]=f;pre[tot]=u[a];u[a]=tot++; } bool q ; int d ,dis ,head[2*N]; bool bfs(int n) { int i,l=1,r=1; memset(q,0,sizeof(q)); q[1]=1;d[1]=1;dis[1]=0; for (;l<=r;l++) { for (i=u[d[l]];i!=-1;i=pre[i]) if (!q[v[i]]&&flow[i]) d[++r]=v[i],q[v[i]]=1,dis[v[i]]=dis[d[l]]+1; } return q ; } int dfs(int x,int a,int en) { if (x==en||a==0) return a; int ret=0,f; for (int& i=u[x];i!=-1;i=pre[i]) if (dis[v[i]]==dis[x]+1&&(f=dfs(v[i],min(a,flow[i]),en))>0) { flow[i]-=f;flow[i^1]+=f; ret+=f;a-=f; if (a==0) break ; } return ret; } int main() { int a,b,f,i,n,m,ans,xx=0; while (scanf("%d%d", &m, &n)!=EOF) { tot=0;ans=0; memset(u,-1,sizeof(u)); for (i=1;i<=m;i++) { scanf("%d%d%d", &a, &b, &f); add(a,b,f);add(b,a,0); } for (i=1;i<=n;i++) head[i]=u[i]; while (bfs(n)) { ans+=dfs(1,INF,n); for (i=1;i<=n;i++) u[i]=head[i]; } printf("%d\n", ans); } return 0; }
相关文章推荐
- Genymotion模拟器出现Unable to create virtual device Fail to create SD card解决方法
- See You Again--Wiz Khalifa
- ssh client 报 algorithm negotiation failed
- 70. Climbing Stairs
- Thread_wait、notify、notifyAll的使用方法
- AIX 常用命令
- 【POJ3691】 DNA repair (AC自动机+DP)
- AFNetworking Error Domain=NSCocoaErrorDomain Code=3840
- rails render partial的问题(collection)
- Codeforces 690C2 Brain Network (medium) (树的直径)
- HDU 4251 The Famous ICPC Team Again 划分树 区间第K大
- http://blog.csdn.net/liuzhenwen/article/details/4155447
- jenkins集成ansible注意事项Failed to connect to the host via ssh.
- POJ 1273 Drainage Ditches(最大流模板)
- AIDL介绍和实例讲解
- AIDL介绍和实例讲解
- 模糊图片秒转高清图
- Helvetic Coding Contest 2016 C2. Brain Network (medium)
- 关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试
- 关于LogStash运行在AIX 64位机器上的问题与临时解决方案