POJ PKU 2112 最大流
(2010-08-09 10:51:23)
标签:
pojpku2112最大流it |
分类: 网络流 |
题目描述:
k个机器,每个机器最多服务m头牛。
c头牛,每个牛需要1台机器来服务。
告诉你牛与机器每个之间的直接距离。
问:让所有的牛都被服务的情况下,使走的最远的牛的距离最短,求这个距离。
解题报告:
二分枚举距离,实际距离满足当前枚举距离限制的可以加入这条边。枚举的距离中符合条件的最小值就是答案。
建图过程:
一个超级原点,和每个机器的容量都是m。
一个超级汇点,每头牛和汇点的容量都是1.
机器i与牛j之间的距离如果小于等于当前枚举值mid,连接i,j,容量1.
这样最大流的意义就是能够服务的牛最多是多少,如果最大流等于牛的总数c,表示当前枚举值mid符合条件,同时说明mid值还可能可以更小,更新二分右边界r = mid - 1.
如果小于牛的总数,说明mid偏小,更新二分左边界,l = mid + 1.
机器与牛之间的最短距离可以用floyd预处理出来。
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define size 240
#define Max 0x7fffffff
int cap[size][size],s,t,n;
int queue[size],head,tail, Flow,prev[size];
bool
findload()
{
}
int maxflow()
{
}
int k, c, m, x[size][size], ans;
void jeogia()
{
}
int main()
{