hihocoder 二分·二分答案【二分搜索,最大化最小值】 (bfs)
这道题做了几个小时了都没有做出来,首先是题意搞了半天都没有弄懂,难道真的是因为我不打游戏所以连题都读不懂了?
反正今天是弄不懂了,过几天再来看看。。。
题意:一个人从1点出发到T点去打boss,这个人有两个属性值,防御值和战斗值,这两个值成反比,为了打赢boss我们要使战斗值最大,于是乎防御值就要最低,但是也不能太低,于是乎这个界限在哪,这就是我们要求的。每条路上都有一个索敌值,防御值必须>=索敌值 才能通过。从1点到T点有很多条通路,我们要找的是:这每一条通路中索敌值最大的中索敌值最小的,感觉这句话有点绕,具体解释看下图:
1号节点是起点,5号是终点,从1到5有三条通路:1->2->5; 1->3->5; 1->4->5; 对应路径中最长的路段长度分别是:3;5;4;因此在{3,5,4}中最小值3是正确值。
所以这道题是用二分求,最大化最小值。
#include <bits/stdc++.h>
using namespace std;
int n,m,k,t;
const int Max = 10005;
int vis[Max];
struct edge{
int x,w;
};
vector<edge> v[Max];
int bfs(int dis)
{
memset(vis,0,sizeof(vis));
queue<int> q;
q.push(1);
while(!q.empty())
{
int cur = q.front();
q.pop();
if(cur==t) return true;
if(vis[cur]==k)
continue;
int l = v[cur].size();
for(int i=0;i<l;i++)
{
int tmp = v[cur][i].x;
if(vis[tmp]||v[cur][i].w>dis)
continue;
vis[tmp]=vis[cur]+1;
q.push(tmp);
}
}
return false;
}
int main()
{
int a,b,c;
while(~scanf("%d%d%d%d",&n,&m,&k,&t))
{
int a,b,c,maxn=0;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
edge tmp;
tmp.x = b; tmp.w = c;
v[a].push_back(tmp);
tmp.x = a;
v[a].push_back(tmp);
maxn = max(maxn,c);
}
int mid,l=0,r=maxn;
while(l<=r)
{
mid = (l+r)/2;
if(bfs(mid)){
r=mid-1;
}else{
l=mid+1;
}
}
printf("%d\n",l);
}
return 0;
}
hihocoder 二分·二分答案【二分搜索,最大化最小值】 (bfs)的更多相关文章
- 二分算法的应用——最大化最小值 POJ2456 Aggressive cows
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Description Far ...
- poj 3258"River Hopscotch"(二分搜索+最大化最小值问题)
传送门 https://www.cnblogs.com/violet-acmer/p/9793209.html 题意: 有 N 块岩石,从中去掉任意 M 块后,求相邻两块岩石最小距离最大是多少? 题解 ...
- POJ 2456 3258 3273 3104 3045(二分搜索-最大化最小值)
POJ 2456 题意 农夫约翰有N间牛舍排在一条直线上,第i号牛舍在xi的位置,其中有C头牛对牛舍不满意,因此经常相互攻击.需要将这C头牛放在离其他牛尽可能远的牛舍,也就是求最大化最近两头牛之间的距 ...
- POJ 3258 River Hopscotch(二分查找答案)
一个不错的二分,注释在代码里 #include <stdio.h> #include <cstring> #include <algorithm> #include ...
- hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )
题目1 : 二分·二分答案 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回和上上回里我们知道Nettle在玩<艦これ>,Nettle在整理好舰队之后 ...
- poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分
poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分 题目链接: nyoj : http://acm.nyist.net/JudgeOnline/ ...
- POJ_2456_Agressive_cows_(二分,最大化最小值)
描述 http://poj.org/problem?id=2456 有n个小屋,线性排列在不同位置,m头牛,每头牛占据一个小屋,求最近的两头牛之间距离的最大值. Aggressive cows Tim ...
- POJ3285 River Hopscotch(最大化最小值之二分查找)
POJ3285 River Hopscotch 此题是大白P142页(即POJ2456)的一个变形题,典型的最大化最小值问题. C(x)表示要求的最小距离为X时,此时需要删除的石子.二分枚举X,直到找 ...
- codeforce 1070 E Getting Deals Done(二分求最大化最小值)
Polycarp has a lot of work to do. Recently he has learned a new time management rule: "if a tas ...
随机推荐
- (转)EasyUI 分页总结
最近用到了easyui的分页和搜索栏功能,使用过程中由于运用不熟练导致其间也出现过一些问题,下面做个小结,供大家共同学习.1.首先使用EasyUI 的DataGrid分页,得加载其js类库:< ...
- 简易Java文本编译器(C++)
如何使用VS写一个Java的文本"编译器 "? 所需程序: 1.Visual Studio 2.JDK 你是否因为习惯于使用VS编译C/C++程序,在学java的时候改用新编译器而 ...
- 简单选择排序(js版)
简单选择排序 基本思想:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换.(废话不多说,先看代码). function SelectSort(arr){ var ...
- Linux.CommanlineTool.grep
grep grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] 1. grep的Regula ...
- uuid唯一吗
是唯一的.我在几台硬件完全相同(同一批购买的).软件也完全相同(用同一个GHOST系统安装)的电脑上试过: 不同的电脑上,wmic csproduct get uuid 获取的UUID码是不同的.另 ...
- HashMap 、HashTable、TreeMap、WeakHashMap的区别是什么
Java为数据结构中的映射定义了一个接口java.util.Map,它有4个实现类:HashTable.HashMap.TreeMap.WeakHashMap. HashMap和HashTable的区 ...
- Mysql遇到的坑
2018-04-09 这个虽然跟粗心有关,但是Mysql没报错是哪般? select sum(play_count) from tb_user_login where user_id = 61 and ...
- Exception 异常 输出的各个方法的区别
try{ System.out.println(1/0); }catch(Exception e){ //System.out.println(e+""); //对象+字符串 = ...
- 转载 html div三列布局占满全屏(左右两列定宽或者百分比、中间自动适应,div在父div中居底)
原文地址:http://blog.csdn.net/duyelang/article/details/20558899 <p><!DOCTYPE html> <html ...
- 开发简单的JavaWeb项目
一.配置相关环境 下载配置JDK,eclipse,Tomcat服务器,Mysql数据库,Navicat for MySQL(数据库可视化工具) 如果你已经做好各个环境的配置,eclipse与Tomca ...