题意

有一张kkk*kkk的地图,地图上有kkk个城市,地图上的i,ji,ji,j表示第iii个城市到第jjj个城市的距离,地图上有两个国家,AAA&BBB,AAA国有nnn个城市,每个城市有一枚导弹,BBB国有mmm个城市,一枚导弹能摧毁一个BBB国的城市,求AAA国要多久才能摧毁整个BBB国

样例

输入

3
0 2 1
2 0 10
1 10 0
1
2
1
3

输出

3

样例解释

0    2   1
2   0   10
1   10   0

第二行第三列=10,表示编号为2(A2(A2(A国的城市)))的城市到编号为3(B3(B3(B国的城市)))的直接距离为101010,但这个距离并不是最优的,我们通过观察可以发现,从AAA国出发(编号为222的城市),先到编号为111的城市(用时为222),再从这个城市出发到BBB国城市,用时为111
所以摧毁BBB国最快的时间=2+1=3=2+1=3=2+1=3
所以样例答案为333

思路

首先通过Floyd求出最短路径,然后二分+最大匹配求出答案就OK了。

代码

#include<iostream>
#include<cstring>
#include<cstdio>using namespace std;int f[505][505];
int t, N, M, K, ans;
int h[105], used[105], link[105], A[105], B[105];struct node
{int to, next;
}w[5005];void add(int x, int y)
{w[++t] = (node){y, h[x]}; h[x] = t;}bool find(int x)
{for(int i = h[x]; i; i = w[i].next){int to = w[i].to;if (!used[to]){int p = link[to];link[to] = x;used[to] = 1;if (!p || find(p)) return 1;link[to] = p;}}return 0;
}bool check(int x)
{int sum = 0;t = 0;memset(w, 0, sizeof(w));memset(h, 0, sizeof(h));memset(link, 0, sizeof(link));for (int i = 1; i <= N; ++i)for (int j = 1; j <= M; ++j)if (f[A[i]][B[j]] <= x) add(i, j);for (int i = 1; i <= N; ++i) {memset(used, 0, sizeof(used));if (find(i)) sum++;}return sum == M;
}int main()
{memset(f, 0x7f, sizeof(f));scanf("%d", &K);for (int i = 1; i <= K; ++i)for (int j = 1; j <= K; ++j)scanf("%d", &f[i][j]);for (int i = 1; i <= K; ++i)for (int j = 1; j <= K; ++j)for (int k = 1; k <= K; ++k)f[i][j] = min(f[i][j], f[i][k] + f[k][j]);scanf("%d", &N);for (int i = 1; i <= N; ++i)scanf("%d", &A[i]);scanf("%d", &M);for (int i = 1; i <= M; ++i)scanf("%d", &B[i]);int l = 1, r = 1e6;while (l <= r){int mid = (l + r) / 2;if (check(mid)) r = mid - 1, ans = mid;else l = mid + 1;}printf("%d", ans);return 0;
}

【JZOJ】【匈牙利算法】【二分】 导弹相关推荐

  1. 【Floyed】【匈牙利算法】导弹(jzoj 1610)

    题目大意: 有n个城市,有一部分是A国的,有一部分是B国的(小于A国的),A国每个城市都有一枚导弹(只有一枚),炸毁别的城市的时间是到这个城市的距离,请问A国最快要多久可以炸毁B国所有城市 解题思路: ...

  2. 利用匈牙利算法Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES...

    首先介绍一下题意:已知,有N个学生和P门课程,每个学生可以选0门,1门或者多门课程,要求在N个学生中选出P个学生使得这P个学生与P门课程一一对应. 这个问题既可以利用最大流算法解决也可以用匈牙利算法解 ...

  3. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  4. 【匈牙利算法】指引(jzoj 2319)

    指引 jzoj 2319 题目大意: 在平面上有n个人和出口,一个出口只能让一个人进,每个人只能向右向上走,问最多让多少个人到出口 输入样例: 6 3 2 0 3 1 1 3 4 2 0 4 5 5 ...

  5. 二分匹配(匈牙利算法)

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...

  6. 二分图带权最大匹配费用流_简单理解二分图与匈牙利算法

    最近在看DETR等论文时时,看到了使用了二分图的最大匹配,对于没有计算机基础的我表示直接上来???,因此本篇博客主要介绍什么是二分图,以及二分图的匹配的匈牙利算法. 首先我们来看看二分图的定义: 二分 ...

  7. 二分最大匹配(匈牙利算法+HK算法)

    http://acm.hdu.edu.cn/showproblem.php?pid=2063 匈牙利算法:http://blog.csdn.net/dark_scope/article/details ...

  8. 过山车 --- 二分匹配算法 匈牙利算法 记录

    Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生 ...

  9. 判别两棵树是否相等 设计算法_从匈牙利算法到KM算法

    网上搜了好多KM算法的文章,都写得云里雾里.看了半天之后,我终于看懂了.其实KM算法非常简单,只要会匈牙利算法了,一下就能看懂KM算法. 如果大家对自己的匈牙利算法不够自信的话,可以先复习一下,放上我 ...

  10. 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题

    题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...

最新文章

  1. Windows环境下配置环境变量
  2. 替换UI--遮挡问题
  3. fileviewpro绿色免安装版
  4. 【设计模式】C++单例模式
  5. python 下载拉钩教育AES加密视频
  6. 前端学习(2810):完成安卓打包
  7. 阿里云容器服务发布 Knative 托管服务
  8. MyEclipse中使用Proxool+mysql连接池的方法
  9. 20-21-2网络管理quiz6
  10. Google FlatBuffers——开源、跨平台的新一代序列化工具
  11. N35-第十四周作业
  12. 拓端tecdat|R语言中的copula GARCH模型拟合时间序列并模拟分析
  13. docker-compose简单使用
  14. php酒店系统论文,PHP酒店网站管理系统毕业论文
  15. 计算机密码无法输完整,笔记本电脑键盘失灵无法输入密码怎么解决
  16. I5 4590 台式机安装黑苹果最新版笔记
  17. 前端UI设计稿对比工具
  18. 面试题,移动端APP测试常见bug记录
  19. workbench3.2学习笔记三
  20. 烈焰遮天mysql密码_完美运营版悬赏任务积分墙源码

热门文章

  1. 为什么会亏钱,亏钱的逻辑(一)
  2. 去你的,奋斗逼,别把加班文化带到微软来
  3. STM32入门开发--LED模块实现跑马灯
  4. 【学习小记】狄利克雷卷积+杜教筛
  5. 关于“Guice ”
  6. 4-2 能力提升与优势打造-工作流程梳理-从执行跃迁到流程的方法流程化、工具化、清单化
  7. mysql function 1064_mysql 创建 function 错误 1064解决方案
  8. 微信发明者自曝 专利已秘密转让腾讯
  9. 一套完整的软件开发流程是怎样的?
  10. IDEA启动连接不上数据库,但navicat却可以问题