POJ 3189 最大流
(2010-09-17 08:45:02)
标签:
poj3189最大流it |
分类: 网络流 |
题目描述:
N头牛(1000),B个农场(20),每个农场可以容纳一定数量的牛。
每头牛对每个农场都有一个排名(排名从1~B)。
每头牛都会在B个农场中的某一个,这头牛的高兴程度是它对这个农场的排名。
为了使每头牛都尽量同等高兴,希望所有牛中最高兴的和最不高兴的程度差值最小,求这个差值。
解题报告:
易知,用最大流是否满流可以判断是否所有牛都被容纳。
然后枚举排名的最高值和最低值(C20,2),每次都连接合法的边,判断是否满流即可。满足条件的差值最小值就是答案。
建图:
超级源点s,和每头牛连接,容量1。超级汇点t,所有农场和t连接,容量是农场的容量。
如果牛i对农场j的排名在当前枚举的范围内,连接i,j容量1。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, b, g[1000][20], cap[20], ans;
#define Max 0x1fffffff
#define size 1200
struct edge{int from, to, val, next;}e[100000];
int v[size], que[size], dis[size], cnt, cur[size];
void insert(int from, int to, int va)
{
}
bool bfs(int n, int s, int t)
{
}
int Dinic(int n, int s, int t)
{