[HDU4123]Bob’s Race
题目大意:
给定一棵$n$个点并且有边权的树,每个点的权值为该点能走的最远长度,并输入$m$个询问,每次询问最多有多少个编号连续的点,他们的最大最小点权差小于等于$Q$。
思路:
两趟DP(DFS)求出每个点能走的最远长度,然后用ST算法预处理出每一段最大最小值。
对于每组询问,用尺取法求出最大值。
注意log2不能用cmath里面的函数(尤其是不能在for语句上),不然会TLE,最好是自己实现。
#include<cstdio>
#include<cctype>
#include<vector>
inline int getint() {
char ch;
while(!isdigit(ch=getchar()));
int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
inline int log2(const float x){
return ((unsigned&)x>>&)-;
}
const int N=,logN=;
struct Edge {
int to,w;
};
std::vector<Edge> e[N];
inline void add_edge(const int u,const int v,const int w) {
e[u].push_back((Edge){v,w});
}
int w[N][],son[N];
void dfs1(const int x,const int par) {
w[x][]=w[x][]=;
for(unsigned i=;i<e[x].size();i++) {
int &y=e[x][i].to;
if(y==par) continue;
dfs1(y,x);
if(w[y][]+e[x][i].w>w[x][]) {
w[x][]=w[x][];
w[x][]=w[y][]+e[x][i].w;
son[x]=y;
}
else if(w[y][]+e[x][i].w>w[x][]) {
w[x][]=w[y][]+e[x][i].w;
}
}
}
void dfs2(const int x,const int par) {
for(unsigned i=;i<e[x].size();i++) {
int &y=e[x][i].to;
if(y==par) continue;
w[y][]=std::max(w[x][],son[x]!=y?w[x][]:w[x][])+e[x][i].w;
dfs2(y,x);
}
}
int max[N][logN],min[N][logN];
inline int getsum(const int l,const int r) {
int k=log2(r-l+);
return std::max(max[l][k],max[r-(<<k)+][k])-std::min(min[l][k],min[r-(<<k)+][k]);
}
int main() {
for(;;) {
int n=getint(),m=getint();
if(!n&&!m) return ;
for(int i=;i<n;i++) {
int u=getint(),v=getint(),w=getint();
add_edge(u,v,w);
add_edge(v,u,w);
}
dfs1(,);
dfs2(,);
for(int i=;i<=n;i++) {
max[i][]=min[i][]=std::max(w[i][],w[i][]);
}
for(int j=;<<j<=n;j++) {
for(int i=;i<=n-(<<j)+;i++) {
max[i][j]=std::max(max[i][j-],max[i+(<<(j-))][j-]);
min[i][j]=std::min(min[i][j-],min[i+(<<(j-))][j-]);
}
}
while(m--) {
int q=getint(),ans=;
for(int l=,r=;l<=r;l++) {
for(;r<=n&&getsum(l,r)<=q;r++);
ans=std::max(ans,r-l);
}
printf("%d\n",ans);
}
for(int i=;i<=n;i++) e[i].clear();
}
}
[HDU4123]Bob’s Race的更多相关文章
- POJ 4003 Bob’s Race && HDU4123 Bob’s Race (dfs+rmq)
Bob’s Race Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 378 Accepted: 119 Descript ...
- 刷题总结——Bob's Race(hdu4123 树形dp+st表)
题目: Bob wants to hold a race to encourage people to do sports. He has got trouble in choosing the ro ...
- hdu 4123 Bob’s Race 树的直径+rmq+尺取
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- HDU 4123 Bob’s Race 树的直径 RMQ
Bob’s Race Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=41 ...
- HDU 4123 Bob’s Race(树形DP,rmq)
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 4123 Bob’s Race 树形dp+单调队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 Time Limit: 5000/2000 MS (Java/Others) Memory L ...
- hdu 4123 Bob’s Race (dfs树上最远距离+RMQ)
C - Bob’s Race Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Subm ...
- HDU 4123 Bob’s Race 树的直径+ST表
Bob’s Race Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=41 ...
- 树形DP+RMQ+单调队列(Bob’s Race HDU4123)
题意:有n个房子,这些房子被n-1条道路连接,有一些运动员从一个房子为起点尽可能跑最远的距离且不能通过一条道路超过两次,这些运行员不能选择同样的起点,这些运动员跑的最远距离和最近距离的差值不能超过Q, ...
随机推荐
- Dubbo学习笔记6:Dubbo增强SPI与SPI中扩展点自动包装的实现原理
在Dubbo整体架构分析中介绍了Dubbo中除了Service和Config层为API外,其他各层均为SPI,为SPI意味着下面各层都是组件化可以被替换的,也就是扩展性比较强,这也是Dubbo比较好的 ...
- Mac下安装zsh(Oh My ZSH)的shell,替代原有的bash
说明:一开始装zsh我是拒绝的,因为这个东西装简单,卸载很难,并且装了之后默认Shell的配置文件不能用了,比如~/.bashrc这些.所以在装的时候要再三考虑好! 官网:http://ohmyz.s ...
- [转载]Juicer – 一个Javascript模板引擎的实现和优化
http://ued.taobao.org/blog/2012/04/juicer-%E4%B8%80%E4%B8%AAjavascript%E6%A8%A1%E6%9D%BF%E5%BC%95%E6 ...
- shell 示例1 从1叠加到100
从1叠加到100 echo $[$(echo +{..})] echo $[(+)*(/)] seq -s |bc
- 2017-2018-2 20165227 实验四《Android程序设计》实验报告
一.实验报告封面 课程: Java程序设计 班级: 1652班 姓名: 朱越 学号: 20165227 指导教师: 娄嘉鹏 实验日期: 2018年5月14日 实验时间: 13:45 - 3:25 实验 ...
- 【干货】操纵时间 感受威胁 MAC time时间戳视角
来源:Unit 4: Unix/Linux Forensics Analysis 4.1 Unix/Linux Forensics Analysis MAC Times Sleuthkit工具的MAC ...
- centos6.8安装mysql5.6【转】
首先先要去看看本机有没有默认的mysql, 本地默认有的,我们应先卸载,在安装新的这个逻辑. rpm -qa | grep mysql 我本机默认安装的mysql5.1.73 下一步删除 rpm -e ...
- Ibatis.Net 数据库操作学习(四)
一.查询select 还记得第一篇示例中是如何读出数据库里3条数据的吗?就是调用了一个QueryForList方法,从方法名就知道,查询返回列表. 1.QueryForList 返回List< ...
- wpf 自定义控件展开popup,点击popup之外的部分,popup不能自动关闭
比如textbox点击展开popup,这样popup也是不能自动关闭的.可能是textbox获得了焦点. 可是使用textblock,或者ToggleButton来代替textbox点击展开popup ...
- 阿里云服务器配置nginx和PHP
1. 安装及启动nginx 输入yum install nginx命令进行nginx的安装,当需要确认时输入”y“确认. yum install nginx 安装完成后,输入service nginx ...