POJ 2112 Optimal Milking(Floyd+多重匹配+二分枚举)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define INF 0x3fffffff
#define maxn 1255
int n, m, k;///n个挤奶机 m只奶牛 每台挤奶机最多挤 k只
bool vis[maxn];
int G[maxn][maxn], Dis[], DisNum;
vector<vector<int> > P;///用来保存匹配的数据 void Floyd()
{
int len = n + m;
DisNum = ;
for(int k=; k < len; k++)
{
for(int i=; i < len; i++)
{
for(int j=; j < len; j++)
G[i][j] = min(G[i][j], G[i][k]+G[k][j]);
}
} for(int i=; i<len; i++)
{
for(int j=; j<len; j++)
Dis[DisNum ++] = G[i][j];
}
}
bool Find(int u,int limt)
{
for(int i=; i<n; i++)
{
if(!vis[i] && G[u][i] <= limt)
{
vis[i] = true;
if(P[i].size() < k)
{
P[i].push_back(u);
return true;
}
for(int j=; j<P[i].size(); j++)
{
if( Find(P[i][j], limt) )
{
P[i].erase(P[i].begin()+j);
P[i].push_back(u);
return true;
}
}
}
}
return false;
} bool solve(int limt)
{
P.clear();
P.resize(n+);
for(int i=n; i<n+m; i++)
{
memset(vis, false, sizeof(vis));
if( !Find(i,limt) )
return false;
}
return true;
} int main()
{
while(scanf("%d %d %d", &n, &m, &k) != EOF)
{
for(int i=; i<n+m; i++)
{
for(int j=; j<n+m; j++)
{
scanf("%d", &G[i][j]);
if(!G[i][j]) G[i][j] = INF;
} }
Floyd();///先进行一下闭包传递
sort(Dis,Dis + DisNum);
int L = , R = DisNum - ; while(L < R)
{
int mid = (L + R) / ;
if( solve(Dis[mid]) )
R = mid;
else
L = mid + ;
}
printf("%d\n", Dis[R]);
}
return ;
}
POJ 2112 Optimal Milking(Floyd+多重匹配+二分枚举)的更多相关文章
- POJ 2112—— Optimal Milking——————【多重匹配、二分枚举答案、floyd预处理】
Optimal Milking Time Limit:2000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Sub ...
- poj 2112 Optimal Milking (二分图匹配的多重匹配)
Description FJ has moved his K ( <= K <= ) milking machines <= C <= ) cows. A ..K; the c ...
- POJ 2112 Optimal Milking (Floyd+二分+最大流)
[题意]有K台挤奶机,C头奶牛,在奶牛和机器间有一组长度不同的路,每台机器每天最多能为M头奶牛挤奶.现在要寻找一个方案,安排每头奶牛到某台机器挤奶,使得C头奶牛中走过的路径长度的和的最大值最小. 挺好 ...
- POJ 2112 Optimal Milking(二分图匹配)
[题目链接] http://poj.org/problem?id=2112 [题目大意] 给出一些挤奶器,每台只能供给M头牛用,牛和挤奶器之间有一定的距离 现在要让每头牛都挤奶,同时最小化牛到挤奶器的 ...
- Poj 2112 Optimal Milking (多重匹配+传递闭包+二分)
题目链接: Poj 2112 Optimal Milking 题目描述: 有k个挤奶机,c头牛,每台挤奶机每天最多可以给m头奶牛挤奶.挤奶机编号从1到k,奶牛编号从k+1到k+c,给出(k+c)*(k ...
- POJ 2112 Optimal Milking (二分 + floyd + 网络流)
POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C ...
- POJ 2112 Optimal Milking (二分+最短路径+网络流)
POJ 2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit: 2000MS Memory Limit: 30000K To ...
- POJ 2112 Optimal Milking (Dinic + Floyd + 二分)
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 19456 Accepted: 6947 ...
- POJ2112 Optimal Milking —— 二分图多重匹配/最大流 + 二分
题目链接:https://vjudge.net/problem/POJ-2112 Optimal Milking Time Limit: 2000MS Memory Limit: 30000K T ...
随机推荐
- 开始android博客分享
现在开始写博客,分享android开发中的心得.
- jsp页面表单的遍历要怎么写
1.传统的方式使用request.getAttribute(“list”);获取表单的值, 2.也可以用struts2提供的标签进行遍历 备注 // 传统的接受参数方法 // String sfz=t ...
- xctool工具
xctool [1]xctool的特性: 原文:http://www.infoq.com/cn/news/2013/05/Facebook-buck-xctool-build xctool是Faceb ...
- 关于cocoapods和swift中使用oc第三方
mac 系统自带ruby,使用cocoapods,直接安装cocoapods就行 终端:$ sudo gem install cocoapods {安装较慢是因为有墙,查看ruby镜像列表:$ gem ...
- IOS DLNA开发(CyberLink和PlatinumKit)
1.CyberLink 和 PlatinumKit 两者的比较 CyberLink大概在2010年之后功能就没有更新,部分功能不够完善,网上有下载地址 http://www.pudn.com/down ...
- Valid Phone Numbers
Given a text file file.txt that contains list of phone numbers (one per line), write a one liner bas ...
- Android Context作用
Context 用于访问全局信息的接口 App的资源: strings, drawable资源等等 工程代码:LearnContext.zip ---------------------------- ...
- Unix/Linux 'dirctory tree' command.
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' It se ...
- 枚举宏(Adopting Modern Objective-C)
使用NS_ENUM 和 NS_OPTIONS宏定义枚举.Adopting Modern Objective-C 使用NS_ENUM宏定义一组互斥的枚举值: typedef NS_ENUM(NSInte ...
- oracle常见sql积累
select lower('HELLO') from dual;select lpad(100, 5, '*') from dual;select sysdate + 1 / 24 from dual ...