题目大意:

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


解题思路:

先用Floyed来求出最短路,然后二分枚举答案再用匈牙利算法确认是否可以,即可


代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int bg[105],head[105],a[105][105],b[105],c[105],w,sum,l,r,mid,n,m,nm;
bool pd[105];
struct rec
{int to,next;
}f[10005];//每一条路线
bool js(int xx)
{int l=0;for (int i=head[xx];i;i=f[i].next)//连接此点的每一条线if (!pd[f[i].to])//可以抢{l=bg[f[i].to];//之前是谁打的bg[f[i].to]=xx;//代替pd[f[i].to]=true;//不能抢了if ((!l)||(js(l))) return true;//之前没人或抢到了bg[f[i].to]=l;//没法打这个城市就还给之前的}return false;//找不到可以打的
}
bool sj(int now)
{memset(head,0,sizeof(head));//清零memset(bg,0,sizeof(bg));//清零w=0;//清零sum=0;//清零for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (a[b[i]][c[j]]<=now)//判断是否少于当前的时间{f[++w].to=j;//下一个点f[w].next=head[i];//下一条线head[i]=w;//这个点的第一条线} for (int i=1;i<=n;i++){memset(pd,false,sizeof(pd));//清零if (js(i)) sum++;//判断是否能打到敌人}return sum==m;//判断是否打完
}
int main()
{scanf("%d",&nm);for (int i=1;i<=nm;i++)for (int j=1;j<=nm;j++)scanf("%d",&a[i][j]);for (int k=1;k<=nm;k++)for (int i=1;i<=nm;i++)for (int j=1;j<=nm;j++)if ((i!=j)&&(j!=k)&&(k!=i)&&(a[i][k]+a[k][j]<a[i][j]))a[i][j]=a[i][k]+a[k][j];//Floyedscanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&b[i]);scanf("%d",&m);for (int i=1;i<=m;i++)scanf("%d",&c[i]);l=1;r=10000;while(l<=r){mid=(l+r)/2;//二分答案if (sj(mid)) r=mid-1;else l=mid+1;}printf("%d",l);//输出return 0;
}

【Floyed】【匈牙利算法】导弹(jzoj 1610)相关推荐

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

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

  2. 二分图匹配匈牙利算法DFS实现

    1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...

  3. 解题报告:luogu P2423 [HEOI2012]朋友圈【最大团转最大点独立集(匈牙利算法+时间戳优化)】

    图的最大团:"任意两点之间都有一条边相连"的子图被称为无向图的团,点数最多的团为图的最大团 朋友圈中任意两个点之间都有关系,既是图中的团. 答案就是图中的最大团. 我们如果把B国的 ...

  4. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...

  5. 二分图匹配的匈牙利算法

    匈牙利算法,很绕,其实写起来也就一点点长度.. bool find(int a){int i,j;for(i=head[a];i;i=next[i]){j=to[i];//获得相邻的点if(!unab ...

  6. 二分图-匈牙利算法模板

    二分图就不赘述了,我在知识资料整理有相关资料. .最大匹配  .最小路径覆盖  .最小点覆盖  .最大独立集 最大匹配:二分图中边集最大的那个匹配 最小路径(边)覆盖:用尽量小的不想交简单路径覆盖有向 ...

  7. 二分图的最大匹配—匈牙利算法

    [基本概念]: 二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分 ...

  8. BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法

    刚学了匈牙利正好练练手(我不会说一开始我写错了)(怕不是寒假就讲了可是我不会) 把人看做左部点,床看作右部点 建图:(!!在校相当于有床,不在校相当于没有床 但是要来学校) 1.在校的 不走的人 自己 ...

  9. 匈牙利算法学习笔记_Python代码

    学习华为上机测试题,遇见了下面题,很有意思,核心是匈牙利算法问题. 特此学习记录.资料均参考自网络. 匈牙利算法目的:找出两边最大的匹配的数量. 参考资料: https://blog.csdn.net ...

最新文章

  1. 【转】oracle PLSQL基础学习
  2. python编译so
  3. python序列类型-python-序列类型
  4. CodeForces 139C Literature Lesson(模拟)
  5. Tomcat打开远程调试和jmx远程监控
  6. 【NOIP1997】【codevs1219】骑士游历
  7. JS原型链原理(链表)
  8. C++如何测试dll_Windows x86 Shellcode开发:寻找Kernel32.dll地址
  9. 51单片机开发入门(1)-单片机简介
  10. 21cn邮箱服务器端,21CN 免费邮箱常见问题
  11. Shattered Cake
  12. 如何在企业微信中使用微搭低代码
  13. 回顾我的 2018 读书历程以及个人感悟,让我们一起期待更好的未来(本文耗时 8 个月。。。)
  14. Elasticsearch的路由(Routing)特性
  15. 智云通CRM:如何与客户建立信任关系?
  16. 自制舵机(伺服电机)控制系统的一点感想
  17. 笔记本分屏后鼠标卡顿问题解决
  18. 归并排序(图解配代码)
  19. 大数据下的用户行为分析
  20. LORA技术简要说明

热门文章

  1. python3怎么安装gmpy2_python2/3 模块gmpy2在linux下安装
  2. java emoji编码转换_java转换emoji表情
  3. thinkpadt450s换键盘视频_ikbc c87 入门级有线机械键盘测评
  4. mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具
  5. leetcode1. 两数之和(两种方法)
  6. 二分查找基础概念与经典题目(Leetcode题解-Python语言)二分数值型
  7. Cow Bowling POJ - 3176(基础的动态规划算法)
  8. Linux 文本格式显示折线图,linux 折线图
  9. python实现最小二乘法的线性回归_最小二乘法求线性回归的python实现
  10. mysql boolean_产品操作MySQL第7篇 – 运算符 – IS NULL