(感觉是一个比较基础的二分图多重匹配)

题目意思大概就是有K个挤奶点,C个奶牛,一个挤奶点能容下M个奶牛,问如果所有奶牛都被放入挤奶点时,距离最远奶牛得最短距离(距离可以经过其他点)

首先看到可以经过其他点,就直接无脑用floyd,求出各个点之间得最短距离

然后要求的是最远距离最短情况,用二分求解
(注意:二分的范围需要考虑清楚,并不是200,因为可能要经过别的路到达,所以应该设大点,200*200能过,实在不放心,10的九次方也能过)

最后就是二分判断条件,所有边连接奶牛和挤奶点,所以为二分图,随即二分图多重匹配,用一个match数组存储C匹配的K,若是-1则C还未匹配,然后其他的我就注释在代码里算了,感觉写的还是蛮详细的

#include <iostream>
#include <stdio.h>
#include <string.h>
#define INF 1000000005
using namespace std;
int K, C, M;
int data[255][255];
int match[205];
int used[35];
bool dfs(int v, int num)
{used[v] = true;for(int i = 0; i < C; i++){if(data[v][K+i] <= num)         //距离不能大于num(二分的mid){int w = match[i];if(w < 0 || !used[w] && dfs(w, num))        //先判断w<0,若端点没使用过,则直接连接,然后判断!used[w],防止重复递归,                               最后判断dfs(w),若找到增广路,就return true;{match[i] = v;return true;}}}return false;
}
bool deal(int num)
{int res = 0;memset(match, -1, sizeof(match));for(int i = 0; i < K; i++){int flag = 0;               //记录一个挤奶点,匹配了几个奶牛memset(used, 0, sizeof(used));while(flag < M && dfs(i, num)){memset(used, 0, sizeof(used));flag++;             //每dfs成功一次,就相当于匹配了一个奶牛}res = res + flag;if(res == C){return true;}}return false;
}
int main()
{scanf("%d %d %d", &K, &C, &M);for(int i = 0; i < K + C; i++){for(int j = 0; j < K + C; j++){scanf("%d", &data[i][j]);if(i != j && data[i][j] == 0){data[i][j] = INF;}}}for(int k = 0; k < K + C; k++){for(int i = 0; i < K + C; i++){for(int j = 0; j < K + C; j++){data[i][j] = min(data[i][j], data[i][k] + data[k][j]);}}}int l = -40000, r = 40000, mid = (l + r) / 2;while(l < r){if(deal(mid)){r = mid;mid = (l + r) / 2;}else{l = mid + 1;mid = (l + r) / 2;}}printf("%d\n", l);
}

poj2112(floyd+二分+二分图多重匹配)相关推荐

  1. POJ - 3189 Steady Cow Assignment(二分图多重匹配)

    题目链接:点击查看 题目大意:给出n只奶牛以及m个牛棚,接下来给出一个n*m的矩阵,给出每一只奶牛对于每个牛棚的喜爱度,按照降序给出,从rank1到rankm,现在问如何分配牛棚能让所有奶牛中最高的r ...

  2. 【网络流24题】解题报告:E 、圆桌问题(最大流求二分图多重匹配)

    E .圆桌问题(最大流求二分图多重匹配)[省选/NOI- ] 可以直观的想到,二分图的左边是单位,右边是桌子 由于题目的限制 每个单位只能在一个桌子坐一个人 所以我们就把每个单位向各个桌子连一道流量为 ...

  3. 网络流三·二分图多重匹配 HihoCoder - 1393

    网络流三·二分图多重匹配 HihoCoder - 1393 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int ma ...

  4. HDU - 3605 Escape(二分图多重匹配-网络流最大流+思维建边+状态压缩)

    题目链接:点击查看 题目大意:到世界末日了,现在人们要逃离去其他的星球,现在给出n个人以及m个星球,再给出每个人可以前往的星球,最后给出每个星球的容量,题目问最多能让多少个人逃离 题目分析:这个题读完 ...

  5. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个 满足要求的组卷算法. ...

  6. 网络流三·二分图多重匹配

    描述 学校的秋季运动会即将开始,为了决定参赛人员,需要统计分配比赛选手. 已知班级一共有N名学生,编号依次为1..N. 运动会一共有M项不同的比赛,编号为1..M.第i项比赛每个班需要派出m[i]名选 ...

  7. POJ - 2289 Jamie's Contact Groups(二分图多重匹配)

    题目链接:点击查看 题目大意:给出n个联系人,以及m个分组,现在需要将n个联系人分到m个分组中,需要满足让人数最多的组的人数最少,输出这个值 题目分析:因为是让最大值最小,所以肯定是要用二分解决,因为 ...

  8. [tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)

    传送门 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚 ...

  9. 图论:二分图多重匹配

    使用最大流和费用流解决二分图的多重匹配 之前编辑的忘存了好气啊.. 本来打算学完二分图的乱七八糟的匹配之后再去接触网络流的,提前撞到了 之前我们说的二分图最大匹配和二分图最大权匹配有一个特点,那就是没 ...

最新文章

  1. 从iOS证书申请到签名文件生成
  2. 智源研究院发布《2020北京人工智能发展报告》,剖析北京AI发展的17个中国“第一”...
  3. Ajax接触及对跨域的简单理解
  4. android html文字加中间横线_HTML 语法简要总结
  5. 用vb编制一个计算机程序,用vb编了个数独计算器
  6. 我为国内微积分“小糊涂”感到悲哀!
  7. 担任电气工程师,在软件开发方面建立成功的职业生涯
  8. 【转载】《Real-Time Rendering 3rd》 提炼总结】(二) 第二章 · 图形渲染管线 The Graphics Rendering Pipeline
  9. java+上传整个文件夹的所有文件
  10. android 应用被系统回收,莫往Applicaotion存缓存/app被系统回收之后再打开发生了什么...
  11. matlab的imshow python中cv2.imshow及plt.imshow相关测试
  12. BCB数据库构件用法的总结
  13. 自研代码率超70%,国产大数据基础软件第一股星环科技成功上市!
  14. 推荐几个很好很好用的网站
  15. Js二代身份证号码正则验证
  16. MATLAB 2014a将m文件打包成jar包
  17. oracle创建校友查询系统,中国同学录(5460)及5460的数据库
  18. 用计算机解锁ipad密码忘了怎么办,iPad密码忘记了怎么办_iPad密码忘记解锁办法-太平洋IT百科手机版...
  19. 详解如何处理海量定时任务
  20. UG后处理的相关信息

热门文章

  1. 通讯波形记录——I2S、I2C、Uart、SPI
  2. MongoDB中mapReduce的使用
  3. 关系型数据库-三范式
  4. logback配置文件
  5. 分布式mysql中间件(mycat)
  6. python面向对象编程 -- 封装、继承
  7. Activit流程部署、删除
  8. 为您解析大数据的未来趋势
  9. Autolayout学习(1)-了解Autoreszing
  10. 分享一例脚本发版和tomcat重启脚本