题目描述:

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

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

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

                  

开始时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. Qt之QEvent(所有事件的翻译)

    QEvent 类是所有事件类的基类,事件对象包含事件参数. Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将 ...

  2. JavaScript之JS单线程|事件循环|事件队列|执行栈

    本博文基于知乎"JavaScript作用域问题?"一问,而引起了对JavaScript事件循环和单线程等概念与实践上的研究.深入理解. 一.概念 0.关键词:JavaScript单 ...

  3. Python 入门基础13 --模块与包

    本节内容: 一.模块及使用 1.模块及使用 2.起别名.from导入 3.自执行与模块 二.包的使用 2.1 包中模块的使用:import 2.2 包的嵌套 2.3 包中模块的使用:from ...i ...

  4. android 使用web查看SQLite数据

    添加依赖: compile 'com.facebook.stetho:stetho:1.4.2'compile 'com.facebook.stetho:stetho-okhttp3:1.4.2' 初 ...

  5. Java InputStream 、 InputStreamReader和BufferedReader

    https://blog.csdn.net/zgljl2012/article/details/47267609 在Java中,上述三个类经常用于处理数据流,下面介绍一下三个类的不同之处以及各自的用法 ...

  6. Maven入门-运行struts项目进行测试(三)

    maven运行struts项目进行测试: 在入门二中已经导入struts的jar包. 此时的pom.xml文件 <project xmlns="http://maven.apache. ...

  7. Docker安装ActiveMQ

    ⒈下载 docker pull webcenter/activemq ⒉运行 docker run -d --name myactivemq -p 8161:8161 -p 61613:61613 - ...

  8. UML和模式应用4:初始阶段(3)--需求制品之用例模型

    1. 前言 UP开发包括四个阶段:初始阶段.细化阶段.构建阶段.移交阶段: UP每个阶段包括 业务建模.需求.设计等科目: 其中需求科目对应的需求制品包括:设想.业务规则.用例模型.补充性规格说明.词 ...

  9. 关于GTID模式下备份时 --set-gtid-purged=OFF 参数的实验【转】

    刚刚听了吴老师是复制章节课程,对于GTID模式下备份数据--set-gtid-purged=OFF 参数有些不理解,于是乎做了实验,加深理解,得出些结论,如有错漏请批评指正! 部分备份: [root@ ...

  10. PHP框架CodeIgniter--URL去除index.php

    今天学习CodeIgniter简称CI的第一天,记录下学习心得. CI中国https://codeigniter.org.cn/user_guide/general/urls.html?highlig ...