poj 1273 Drainage Ditches
来源:互联网 发布:笔画笔顺查询软件 编辑:程序博客网 时间:2024/06/05 00:22
题目链接:
http://poj.org/problem?id=1273
题解:
网络流模板
代码:
EK算法:
#include <cmath>#include <vector>#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define inf 0x3f3f3f3f#define met(a,b) memset(a,b,sizeof(a))const int maxn = 200+10;int mp[maxn][maxn];bool visited[maxn];int pre[maxn];int n,m;int bfs(int s,int t){ met(visited,0); met(pre,0); pre[s]=s; visited[s]=true; queue<int>q; while(!q.empty()) q.pop(); q.push(s); while(!q.empty()) { int p=q.front(); q.pop(); for(int i=1;i<=m;i++) { if(mp[p][i]&&!visited[i]) { visited[i]=1; pre[i]=p; if(i==t) return true; q.push(i); } } } return false;}int EX(int s,int t){ int ans=0,flow; while(bfs(s,t)) { flow=inf; for(int i=t;i!=s;i=pre[i]) flow=min(flow,mp[pre[i]][i]); for(int i=t;i!=s;i=pre[i]) { mp[pre[i]][i]-=flow; mp[i][pre[i]]+=flow; } ans+=flow; } return ans;}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { met(mp,0); for(int i=0;i<n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); mp[x][y]+=z; } printf("%d\n",EX(1,m)); }}
Dinic算法:
#include <cmath>#include <vector>#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define inf 0x7fffffff#define met(a,b) memset(a,b,sizeof(a))const int maxn = 200+100;int mp[maxn][maxn];int dis[maxn];int s,t;int n,m;int bfs(){ met(dis,0); queue<int>q; while(!q.empty()) q.pop(); dis[s]=1; q.push(s); while(!q.empty()) { int p=q.front(); q.pop(); for(int i=1;i<=m;i++) { if(mp[p][i]&&!dis[i]) { dis[i]=dis[p]+1; q.push(i); } } } return dis[t]==0;}int dfs(int pos,int flow){ if(pos==t) return flow; int temp=flow; for(int i=1;i<=m&&temp;i++) { if(mp[pos][i]&&(dis[i]==dis[pos]+1)) { int a=dfs(i,min(mp[pos][i],temp)); mp[pos][i]-=a; mp[i][pos]+=a; temp-=a; } } return flow-temp;}int Dinic(){ int ans=0,temp=0; while(!bfs()) { while(temp=dfs(1,inf)) ans+=temp; } return ans;}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { met(mp,0); for(int i=0;i<n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); mp[x][y]+=z; } s=1,t=m; printf("%d\n",Dinic()); }}
阅读全文
0 0
- POJ 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- poj 1273 Drainage Ditches
- poj 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- POJ-1273-Drainage Ditches
- poj 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- poj 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- POJ-1273-Drainage Ditches
- poj 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- poj 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
- robotFramwork
- 装饰模式
- 继承
- K-Means聚类算法的原理及实现
- poj 1273 Drainage Ditches
- 9月28日训练日记
- cin慢解决方案
- 编程题目1
- JAVA Socket 编程学习
- Tyvj4878:道路修建 (环套树DP+单调队列)
- 旋转矩阵和变换矩阵
- EA&UML日拱一卒-活动图::14.4 ProtocolStateMachines
- java设计模式之原型模式,如何实现深克隆