题目链接

Problem Description
Bob wants to hold a race to encourage people to do sports. He has got trouble in choosing the route. There are N houses and N - 1 roads in his village. Each road connects two houses, and all houses are connected together. To make the race more interesting, he requires that every participant must start from a different house and run AS FAR AS POSSIBLE without passing a road more than once. The distance difference between the one who runs the longest distance and the one who runs the shortest distance is called “race difference” by Bob. Bob does not want the “race difference”to be more than Q. The houses are numbered from 1 to N. Bob wants that the No. of all starting house must be consecutive. He is now asking you for help. He wants to know the maximum number of starting houses he can choose, by other words, the maximum number of people who can take part in his race.
 
Input
There are several test cases.
The first line of each test case contains two integers N and M. N is the number of houses, M is the number of queries.
The following N-1 lines, each contains three integers, x, y and z, indicating that there is a road of length z connecting house x and house y.
The following M lines are the queries. Each line contains an integer Q, asking that at most how many people can take part in Bob’s race according to the above mentioned rules and under the condition that the“race difference”is no more than Q.

The input ends with N = 0 and M = 0.

(N<=50000 M<=500 1<=x,y<=N 0<=z<=5000 Q<=10000000)

 
Output
For each test case, you should output the answer in a line for each query.
 
Sample Input
5 5
1 2 3
2 3 4
4 5 3
3 4 2
1
2
3
4
5
0 0
 
Sample Output
1
3
3
3
5
 
 
题意:有一颗树有n个节点编号从1~n,这n-1条边都有一个边权表示两点之间的距离,现在要求出从每个点出发不重复经过同一条边能到达的最远距离,然后m次询问,每次输入一个Q,求从连续编号的起点出发达到最远距离之间的最大值和最小值之差小于等于Q的最大区间长?
 
思路:用前向星建树(定1号节点为根节点),一次搜索求出所有节点 以当前节点为根节点时到达子树叶子节点的最远距离和次远距离,然后再进行一次搜索求出每个节点能到达的最远距离(可能是到孩子叶子节点,也可能是经过父亲节点而来的叶子节点),最后用RMQ中的ST算法配合尺取求出满足条件的最大区间长。
 
注意:使用ST算法,查询时不要使用函数log2(x),这个很费时间,自己求就行;另外可以优化一下尺取。
 
代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const int N=;
int h[N],H[N],H2[N],ans[N],tot;
int f1[N][],f2[N][];
struct edge
{
int to;
int next;
int x;
}e[*N]; void add(int u,int v,int x)
{
e[tot].to=v;
e[tot].x=x;
e[tot].next=h[u];
h[u]=tot++; e[tot].to=u;
e[tot].x=x;
e[tot].next=h[v];
h[v]=tot++;
}
void getH(int id,int fa)
{
H[id]=;
H2[id]=;
for(int i=h[id];i!=-;i=e[i].next)
{
if(e[i].to==fa) continue;
getH(e[i].to,id);
int tmp=H[e[i].to]+e[i].x;
if(H[id]<tmp)
{
H2[id]=H[id];
H[id]=tmp;
}
else if(H2[id]<tmp) H2[id]=tmp;
}
}
void dfs(int id,int fa,int deep)
{
ans[id]=max(deep,H[id]);
for(int i=h[id];i!=-;i=e[i].next)
{
if(e[i].to==fa) continue;
int tmp=deep;
int d=H[e[i].to]+e[i].x;
if(d==H[id]) tmp=max(tmp,H2[id]);
else tmp=max(tmp,H[id]);
dfs(e[i].to,id,tmp+e[i].x);
}
}
void cal(int n)
{
for(int i=;i<=n;i++) f1[i][]=ans[i],f2[i][]=ans[i];
int len=;
for(int s=;len<=n;s++,len*=)
{
for(int i=;i+len-<=n;i++)
{
f1[i][s]=max(f1[i][s-],f1[i+len/][s-]);
f2[i][s]=min(f2[i][s-],f2[i+len/][s-]);
}
}
}
int get(int i,int j)
{
int len=-;
int t=j-i+;
while(t)
{
len++;
t>>=;
}
return max(f1[i][len],f1[j-(<<len)+][len])-min(f2[i][len],f2[j-(<<len)+][len]);
} void init()
{
tot=;
memset(h,-,sizeof(h));
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)&&(n+m))
{
init();
for(int i=;i<n;i++)
{
int u,v,x;
scanf("%d%d%d",&u,&v,&x);
add(u,v,x);
}
getH(,-);
dfs(,-,);
cal(n);
while(m--)
{
int Q; scanf("%d",&Q);
int res=;
int pos=;
for(int i=;i<=n;i++)
{
if(i-pos+<=res) continue; ///优化一下;
int tmp=get(pos,i);
while(tmp>Q)
{
pos++;
tmp=get(pos,i);
}
res=max(res,i-pos+);
}
printf("%d\n",res);
}
}
return ;
}
/**
4 6
1 2 2
1 3 4
3 4 3
*/ /**
18 7984
1 2 2
1 3 4
1 4 3
1 5 5 2 6 1
2 7 3
2 8 7
3 9 2
3 10 4
4 11 2
4 12 2
5 13 3
5 14 3
9 15 7
9 16 6
12 17 5
14 18 4
*/
 

hdu 4123--Bob’s Race(树形DP+RMQ)的更多相关文章

  1. HDU 4123 Bob’s Race 树形dp+单调队列

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 Time Limit: 5000/2000 MS (Java/Others) Memory L ...

  2. 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 ...

  3. hdu 4123 Bob’s Race (dfs树上最远距离+RMQ)

    C - Bob’s Race Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Subm ...

  4. 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 ...

  5. hdu 4123 Bob’s Race 树的直径+rmq+尺取

    Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Probl ...

  6. 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 ...

  7. HDU 4123 Bob’s Race(RMQ)

    题意是说给出一棵树,N(10^5)个顶点,以及每条边的权值,现在需要选择连续的K个点(顶点编号连续),可以被选出来的条件是: 若d[i]代表顶点i到树上其他点的距离的最大值,使得区间[a, b]的d值 ...

  8. HDU 4123 Bob's Race:树的直径 + 单调队列 + st表

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4123 题意: 给你一棵树,n个节点,每条边有长度. 然后有m个询问,每个询问给定一个q值. 设dis[ ...

  9. HDU 4123 Bob’s Race 树的直径+单调队列

    题意: 给定n个点的带边权树Q个询问. 以下n-1行给出树 以下Q行每行一个数字表示询问. 首先求出dp[N] :dp[i]表示i点距离树上最远点的距离 询问u, 表示求出 dp 数组中最长的连续序列 ...

随机推荐

  1. AOP入门之静态代理

    代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及 ...

  2. SpringMVC + Mybatis bug调试 SQL正确,查数据库却返回NULL

    今天碰到个bug,有点意思 背景是SpringMVC + Mybatis的一个项目,mapper文件里写了一条sql 大概相当于 select a from tableA where b = &quo ...

  3. java内存管理(堆、栈、方法区)

    java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...

  4. Java企业微信开发_09_素材管理之下载微信临时素材到本地服务器

    一.本节要点 1.获取临时素材接口 请求方式:GET(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=AC ...

  5. 八大排序算法---基于python

    本文节选自:http://python.jobbole.com/82270/ 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 ...

  6. 计算理论:NFA转DFA的两种方法

    本文将以两种方法实现NFA转DFA,并利用C语言实现. 方法二已利用HNU OJ系统验证,方法一迷之WA,但思路应该是对的,自试方案,测试均通过. (主要是思路,AC均浮云,大概又有什么奇怪的Case ...

  7. DotNetCore跨平台~Quartz定时单次任务

    之前写过一篇文件<DotNetCore跨平台~Quartz热部署的福音-监控文件夹的变化>,今天主要把框架优化了一下,支持外部触发,并支持外部将参数以JobDataMap形式进行输入,然后 ...

  8. Httpservlet 获取json对象字符窜

    使用的是google 的json转换jar import com.google.gson.JsonObject;import com.google.gson.JsonParser; import or ...

  9. ★浅谈Spanking情节

  10. 团队作业8 ----第二次项目冲刺(Beta阶段)博客汇总

    一.冲刺计划安排 团队作业8--Beta版本冲刺计划及安排 二.七天冲刺汇总 [Beta]第一次Daily Scrum Meeting [Beta]第二次Daily Scrum Meeting [Be ...