题目描述:

由于自己“想得太多”,导致自己读了半天题才理解了题意。我还以为索敌值会随着每一次到达战略点而减小,结果题意是索敌值是固定了的,并不会改变。

如下是我对题目中第一个案例的分析:

每个圆圈代表一个战略点的编号,边上的值代表每两个战略点之间所需索敌值。

                  

开始时Nettle在1,他只需要3个索敌值就能到达5了,如图:从战略点1到达战略点5只需要 3 个索敌值,因此答案 3 满足条件,再从战略点2到战略点5只需要 2 个索敌值,答案3大于2,因此答案 3 满足条件。所以,Nettle需要的最少索敌值为3,经1---->2---->5路线,可以消灭boss。

代码实现:

#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int MAXN = 1e6;
const int INF = +;
int N,M,K,T;
struct edge{
int from;//源点
int to;//目标点
int val;//锁敌值
}; struct node{
int to;//目标点
int val;//锁敌值
};
edge E[MAXN*];///所有的边
edge now[MAXN*];///满足k>=val的边
vector<node> G[MAXN];///满足k>=val的边对应的点
bool used[MAXN];
typedef pair<int,int> P;
queue<P> q;
int cmp(edge a, edge b){
return a.val<b.val;//从小到大排序
} bool bfs(int num,int k){///广搜从1到BOSS点的路径
while(!q.empty()){
q.pop();
}
q.push(P(num,k));
used[num]=true;
while(!q.empty()){
P top = q.front();
q.pop();
if(top.first==T){
return true;
}
for(int i=;i<G[top.first].size();i++){
if(!used[G[top.first][i].to]){
used[G[top.first][i].to]=true;
if(top.second>0){///保证索敌值始终大于零,一直广搜总会找到一个合适的索敌值
q.push(P(G[top.first][i].to,top.second-));///每次执行后使索敌值-1
}
}
}
}
return false;
} bool C(int x){
int cnt=;
memset(used,,sizeof(used));
for(int i=;i<MAXN;i++){
G[i].clear();///满足val>=k的边对应的点
}
///满足锁敌值为x的边存在now数组里面
for(int i=;i<*M;i++){
if(E[i].val<=x){///如果这条边的索敌值比答案x的索敌值小,就放入now数组里面
now[cnt++]=E[i];
}
}
for(int i=;i<cnt;i++){
G[now[i].from].push_back((node){now[i].to,now[i].val});
}
if(bfs(,K)){///广搜从1到BOSS点的路径
return true;
}
return false;
} void solve(){
int lb=,ub=INF;
while(ub-lb>){
int mid=(ub+lb)/;
///满足锁敌值为x,且能够找到1点到BOSS点的路径
if(C(mid)){
ub=mid;
}else{
lb=mid;
}
}
printf("%d\n",ub); } int main(){
while(~scanf("%d%d%d%d",&N,&M,&K,&T)){
for(int i=;i<M;i++){
int a,b,val;
scanf("%d%d%d",&a,&b,&val);
E[i].from=a;E[i].to=b;E[i].val=val;///记录每条边的起始和所需索敌值
E[i+M].from=b;E[i+M].to=a;E[i+M].val=val;///将其存为有向图
}
sort(E,E+*M,cmp);
solve();
}
return ;
}

二分搜索-HihoCoder1139的更多相关文章

  1. [LeetCode] Largest BST Subtree 最大的二分搜索子树

    Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...

  2. hdu 2199 Can you solve this equation?(二分搜索)

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  3. hdu 2199:Can you solve this equation?(二分搜索)

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  4. 二分搜索 UVALive 6076 Yukari's Birthday (12长春K)

    题目传送门 题意:问使得sum (k^i) = n || n -1 (1 <= i <= r) 的min (r*k)组合的r和k  分析:r的最大不会超过40,枚举r,二分搜索k.注意会爆 ...

  5. hdu 1075 二分搜索

    还是写一下,二分搜索好了 这道题开数组比较坑... 二分,需要注意边界问题,例如:左闭右闭,左闭右开,否则查找不到or死循环 先上AC代码 #include<iostream> #incl ...

  6. K Best(最大化平均数)_二分搜索

    Description Demy has n jewels. Each of her jewels has some value vi and weight wi. Since her husband ...

  7. HDU 2852 KiKi's K-Number(树状数组+二分搜索)

    题意:给出三种操作 0 e:将e放入容器中 1 e:将e从容器中删除,若不存在,则输出No Elment! 2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find! 思路:树状数组+ ...

  8. nyoj914Yougth的最大化(二分搜索 + 贪心)

    Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗 ...

  9. poj 2976 Dropping tests (二分搜索之最大化平均值之01分数规划)

    Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...

随机推荐

  1. mysql 架构~多写模式MGR

    一  简介:今天咱们来聊聊MGR的单主切换和新节点加入二 单主模式下变成多主:  1 3306  STOP group_replication;  set global group_replicati ...

  2. iptables学习笔记_____摘自朱双印个人日志 ____http://www.zsythink.net/

    iptables为我们预先定义了四张表 raw.mangle.nat.filter filter表负责过滤:允许那些ip访问.拒绝那些ip访问.允许那些端口...是最常用的表 #查看表里面所有的规则i ...

  3. Informatic学习总结_day01

    1.forlder 必须open之后才出现  mapping的界面 2.Source Qualifer 3.小技巧 验证自己写的转换格式是否正确 提前过滤一些数据,informatica工具的本质也是 ...

  4. D3开发中的资料整理

    D3开发台阶比较高,需要对html,css,js非常熟练,还要对SVG非常熟悉,SVG不会就不要开发D3了,下面给大家推荐一本资料,为大家未来的开发提供便利. 这个框架产品不支持ie8,是这个产品的特 ...

  5. 用conda管理Python包

    用conda管理Python包 conda是一个很好的包管理工具,在用了Anaconda之后一直不知道怎么用conda进行管理,其实很简单,就是没人教,慢慢自己摸索了一点.直接在Anaconda的命令 ...

  6. unicode 和 utf-8字符编码的区别

    作者:于洋链接:https://www.zhihu.com/question/23374078/answer/69732605来源:知乎著作权归作者所有,转载请联系作者获得授权.   原文:unico ...

  7. dubbo系列七、dubbo @Activate 注解使用和实现解析

    一.用法 Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机. @Activate(group = Cons ...

  8. js 、c# 编码解码

    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@ ...

  9. oem 重建

    OracleDBControl启动失败to local from URL=http://your-url.co     方法: emca -deconfig dbcontrol db -repos d ...

  10. python 中is和== 的理解

    Python中的对象包含三要素:id.type.value其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值is判断的是a对象是否就是b对象,是通过id来判断的==判断的是a对 ...