[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, ...
随机推荐
- bzoj千题计划192:bzoj1569: [JSOI2008]Blue Mary的职员分配
http://www.lydsy.com/JudgeOnline/problem.php?id=1569 dp[i][j][a][b] 表示i个职员,发广告状态为j,已有金钱a,声誉b的最少天数 j= ...
- 第10月第13天 xcode ipa
1. xcodebuild -exportArchive -exportFormat ipa -archivePath RongChatRoomDemo\ 17-7-13\ 下午4.04.xcarch ...
- 扩展欧几里得(E - The Balance POJ - 2142 )
题目链接:https://cn.vjudge.net/contest/276376#problem/E 题目大意:给你n,m,k,n,m代表当前由于无限个质量为n,m的砝码.然后当前有一个秤,你可以通 ...
- input文本框禁止修改文本——disabled和readonly属性的作用及区别
1.input文本框禁止修改文本 disabled属性:<input type="text" name="name" value="xxx&qu ...
- 内核早期内存分配器:memblock
内核早期内存分配器:memblockLinux内核使用伙伴系统管理内存,那么在伙伴系统工作前,如何管理内存?答案是memblock.memblock在系统启动阶段进行简单的内存管理,记录物理内存的使用 ...
- 关于Mysql5.6半同步主从复制的开启方法【转】
介绍 先了解一下mysql的主从复制是什么回事,我们都知道,mysql主从复制是基于binlog的复制方式,而mysql默认的主从复制方式,其实是异步复制. 主库实际上并不关心从库是否把数据拉完没有, ...
- mysql+mycat压力测试一例【转】
前言 有很多人担心生产系统上新东西的程序怕压力跟不上和稳定性不行,是的,大家都怕,所以领导要求做一次压力测试,我个人也觉得是有必要的. 如果按原理来说,mycat如果不做分片,纯粹只是代理的话,他所做 ...
- 神奇的Content-Type--在JSON中玩转XXE攻击
转自:360安全播报http://bobao.360.cn/learning/detail/360.html 大家都知道,许多WEB和移动应用都依赖于Client-Server的WEB通信交互服务.而 ...
- C++Primer #7 类
类的定义 简单的来说类就是数据和它的操作的一种封装,内部提供接口函数 类的成员函数的声明必须在类的内部,而它的定义则既可以放在类的内部也可以放在类的外部.(一般在类内进行声明,类外实现函数定义) 定义 ...
- .NetCore 使用Zipkin 分布式服务追踪监控服务性能
参考资料 https://zipkin.io/ https://github.com/openzipkin/zipkin/ https://github.com/openzipkin/zipkin4n ...