标签:des style blog color os strong
解题报告
农场有k个挤奶机和c头牛,每头牛到每一台挤奶机距离不一样,每台挤奶机每天最多挤m头牛的奶。
寻找一个方案,安排每头牛到某一挤奶机挤奶,使得c头牛需要走的所有路程中的最大路程的最小值。
要使每一头牛都去挤奶,那么建完模型就要判断是否满流。
由于是多源多点的网络,假设源点0,汇点n+1(n=k+c)
源点到每一头牛的容量为1,每一台机器到汇点的容量为m;用flody求出任意一头牛到任意一台机器的最短路;
对于取最大距离的最小值可以用二分来找。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define inf 99999999 #define K 33 #define C 210 using namespace std; int k,c,m,mmap[K+C][K+C],l[K+C],edge[K+C][K+C],n; void flody() { for(int l=1; l<=n; l++) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(mmap[i][j]>mmap[i][l]+mmap[l][j]) mmap[i][j]=mmap[i][l]+mmap[l][j]; } } } } int bfs() { memset(l,-1,sizeof(l)); queue<int>Q; Q.push(0); l[0]=0; while(!Q.empty()) { int u=Q.front(); Q.pop(); for(int i=0; i<=n+1; i++) { if(edge[u][i]&&l[i]==-1) { l[i]=l[u]+1; Q.push(i); } } } if(l[n+1]>0)return 1; else return 0; } void G(int mid) { int i,j; memset(edge,0,sizeof(edge)); for(i=1; i<=k; i++) edge[i][n+1]=m; for(i=k+1; i<=n; i++) edge[0][i]=1; for(i=k+1; i<=n; i++) { for(j=1; j<=k; j++) { if(mmap[i][j]<=mid) edge[i][j]=1; else edge[i][j]=0; } } } int dfs(int x,int f) { int a; if(x==n+1)return f; for(int i=0; i<=n+1; i++) { if(edge[x][i]&&l[i]==l[x]+1&&(a=dfs(i,min(f,edge[x][i])))) { edge[x][i]-=a; edge[i][x]+=a; return a; } } return 0; } int dinic(int mid) { int ans=0,a; G(mid); while(bfs()) while(a=dfs(0,inf)) ans+=a; return ans; } int main() { int i,j; while(~scanf("%d%d%d",&k,&c,&m)) { n=k+c; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { scanf("%d",&mmap[i][j]); if(!mmap[i][j]) mmap[i][j]=inf; } } flody(); int L=0,R=20000; while(L<R) { int mid=(L+R)/2; int ans=dinic(mid); if(ans>=c)R=mid; else L=mid+1; } printf("%d\n",R); } return 0; }
Time Limit: 2000MS | Memory Limit: 30000K | |
Total Submissions: 11664 | Accepted: 4238 | |
Case Time Limit: 1000MS |
Description
Input
Output
Sample Input
2 3 2 0 3 2 1 1 3 0 3 2 0 2 3 0 1 0 1 2 1 0 2 1 0 0 2 0
Sample Output
2
POJ2112_Optimal Milking(网洛流最大流Dinic+最短路Flody+二分),布布扣,bubuko.com
POJ2112_Optimal Milking(网洛流最大流Dinic+最短路Flody+二分)
标签:des style blog color os strong
原文地址:http://blog.csdn.net/juncoder/article/details/38062553