POJ 2112 /// 最大流+floyd+二分
题目大意:
有 k台挤奶机 和 c头奶牛
每台挤奶机最多为m头奶牛服务
给定所有挤奶机和奶牛两两之间的距离
求一种分配 使得 奶牛与挤奶机之间的最远距离 最小化
floyd求得所有挤奶机与奶牛两两之间的最短距离
二分一个最远距离M 建图
超级源点s与所有奶牛连容量为1的边
所有挤奶机与超级汇点t连容量为m的边
奶牛与挤奶机之间距离<=M的连容量为1的边
跑s到t的最大流 若最大流为c 说明这个最远距离M是符合要求的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
const int N=;
int d[N][N],L,R;
int n,m,s,t; /**Dinic*/
struct NODE { int v,w,r; };
vector <NODE> E[N];
void addE(int u,int v,int w) {
E[u].push_back({v,w,E[v].size()});
E[v].push_back({u,,E[u].size()-});
}
int lev[N], cur[N];
bool bfs(int s,int t) {
mem(lev,); lev[s]=;
queue <int> q; q.push(s);
while(!q.empty()) {
int u=q.front(); q.pop();
for(int i=;i<E[u].size();i++) {
NODE e=E[u][i];
if(e.w> && !lev[e.v]) {
lev[e.v]=lev[u]+;
q.push(e.v);
}
}
}
return lev[t]>;
}
int dfs(int s,int t,int f) {
if(s==t) return f;
for(int& i=cur[s];i<E[s].size();i++) {
NODE& e=E[s][i];
if(e.w> && lev[s]<lev[e.v]) {
int d=dfs(e.v,t,min(f,e.w));
if(d>) {
e.w-=d; E[e.v][e.r].w+=d;
return d;
}
}
}
return ;
}
int maxFlow(int s,int t) {
int flow=, f;
while(bfs(s,t)) {
mem(cur,);
while((f=dfs(s,t,INF))>) flow+=f;
}
return flow;
}
/***/ bool check(int k,int c,int m,int M) {
for(int i=;i<=n+;i++) E[i].clear();
s=,t=n+;
for(int i=k+;i<=n;i++) addE(s,i,);
for(int i=;i<=k;i++) addE(i,t,m);
for(int i=k+;i<=n;i++)
for(int j=;j<=k;j++)
if(d[i][j]<=M) addE(i,j,);
return maxFlow(s,t)==c;
} void floyd(int k,int c) {
L=INF, R=-INF;
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) {
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
L=min(L,d[i][j]); R=max(R,d[i][j]);
}
} int main()
{
int k,c,m;
while(~scanf("%d%d%d",&k,&c,&m)) {
n=k+c;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) {
scanf("%d",&d[i][j]);
if(i!=j && !d[i][j])
d[i][j]=INF;
}
floyd(k,c);
int ans=;
while(L<=R) {
int M=(L+R)>>;
if(check(k,c,m,M))
ans=M,R=M-;
else L=M+;
}
printf("%d\n",ans);
} return ;
}
POJ 2112 /// 最大流+floyd+二分的更多相关文章
- POJ 2112 Optimal Milking (Floyd+二分+最大流)
[题意]有K台挤奶机,C头奶牛,在奶牛和机器间有一组长度不同的路,每台机器每天最多能为M头奶牛挤奶.现在要寻找一个方案,安排每头奶牛到某台机器挤奶,使得C头奶牛中走过的路径长度的和的最大值最小. 挺好 ...
- POJ 2112 Optimal Milking (二分+最短路径+网络流)
POJ 2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit: 2000MS Memory Limit: 30000K To ...
- POJ 2112 Optimal Milking (二分 + floyd + 网络流)
POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C ...
- POJ 2391 Ombrophobic Bovines ( 经典最大流 && Floyd && 二分 && 拆点建图)
题意 : 给出一些牛棚,每个牛棚都原本都有一些牛但是每个牛棚可以容纳的牛都是有限的,现在给出一些路与路的花费和牛棚拥有的牛和可以容纳牛的数量,要求最短能在多少时间内使得每头牛都有安身的牛棚.( 这里注 ...
- POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )
题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...
- POJ 2112 Optimal Milking(二分+最大流)
http://poj.org/problem?id=2112 题意: 现在有K台挤奶器和C头奶牛,奶牛和挤奶器之间有距离,每台挤奶器每天最多为M头奶挤奶,现在要安排路程,使得C头奶牛所走的路程中的最大 ...
- POJ 2391 Ombrophobic Bovines ★(Floyd+二分+拆点+最大流)
[题意]有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点. 和POJ2112很类 ...
- POJ - 2112 Optimal Milking (dijkstra + 二分 + 最大流Dinic)
(点击此处查看原题) 题目分析 题意:在一个农场中有k台挤奶器和c只奶牛,每个挤奶器最多只能为m只奶牛挤奶,每个挤奶器和奶牛都视为一个点,将编号1~k记为挤奶器的位置,编号k+1~k+c记为奶牛的位置 ...
- poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
Ombrophobic Bovines Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 14519Accepted: 3170 De ...
随机推荐
- 攻防世界--crackme
测试文件:https://adworld.xctf.org.cn/media/task/attachments/088c3bd10de44fa988a3601dc5585da8.exe 1.准备 获取 ...
- Python之文件路径名的操作
使用 os.path 模块中的函数来操作路径名 import os # 获取当前文件路径 path=os.path.abspath(__file__) # 获取绝对路径 /home/zzy/Pycha ...
- vue.js(6)--v-model
v-model实现数据的双向绑定(简易计算器实例) 简易计算器实例 <!DOCTYPE html> <html lang="en"> <head> ...
- ABP框架按条件导出
web层 .js导出事件: //导出为excel文档 $('#btn-export').click(function () { //得到查询的参数 var temp = { //这里的键的名字和控制器 ...
- 【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
下面我们进入双端口RAM和多模块存储器的学习.这是提高我们的存储器的访存速度的一些措施. 我们之前已经讲过我们的主存和CPU是进行连接的,那么这就导致了一个问题就是说,随着我们现代科技的发展,计算机的 ...
- 靶场练习--sqli(1&2)
前言 懒猪赵肥肥耍了3天3夜,每天除了练英语口语,啥子都没干.今天开始发愤图强,嘻嘻~ 计划内容有:靶场.视频.python.PHP.java.计算机英语. 首先,每天必搞靶场必看视频必学java和英 ...
- liunx-网络基础
liunx 网络配置 ifconfig: ipconfig -a ;显示信息 ifconfig eth1 up //开启网络接口 ifconfig eth1 down //关闭网络接口 ifconf ...
- Mybatis-Generator demo
使用Mybatis-Generator自动生成Dao.Model.Mapping相关文件(转) https://www.cnblogs.com/smileberry/p/4145872.html == ...
- pugixml的使用
VS项目,头文件处鼠标右键,添加“新建筛选器”,重命名为pugixml,把3个文件添加进来.在用到框架的文件中只需#include"pugixml\pugixml.hpp"即可. ...
- Arthas阿里开源的 Java 诊断工具
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 2.我改的代码为什么没有执行到?难道是我没 commi ...