#include <iostream>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <cstdio>
#include <algorithm>
#include <map>
#define LL long long using namespace std;
const int N = 5e4; int head[N],tot;
int sum,dir[N],ver[N*],R[N*],first[N],visit[N];
int dp[*N][];
struct nodes
{
int to,next,w;
}Edge[N]; void E_init()
{
tot = ;
memset(head,-,sizeof(head));
} void add(int u,int v,int w)
{
Edge[tot].to = v;
Edge[tot].w = w;
Edge[tot].next = head[u];
head[u] = tot++;
} void dfs(int u,int dep)
{
visit[u] = ;
ver[++sum] = u;
first[u] = sum;
R[sum] = dep;
for(int i = head[u]; i != -; i = Edge[i].next)
{
if(!visit[Edge[i].to])
{
dir[Edge[i].to] = dir[u]+Edge[i].w;
dfs(Edge[i].to,dep+);
ver[++sum] = u;
R[sum] = dep;
}
}
} void ST(int n)
{
for(int i = ; i <= n; i++)
dp[i][] = i;
for(int j = ; (<<j)<=n; j++)
{
for(int i = ;i+(<<j)-<=n; i++)
{
int l,r;
l = dp[i][j-];
r = dp[i+ (<<(j-))][j-];
dp[i][j] = R[l]<R[r]?l:r;
}
}
} int RMQ(int l,int r)
{
//int k = log(r-l+1)/log(2);
int k = ;
while( (<<(k+)) <= r - l + ) k++;
int ll = dp[l][k], rr = dp[r-(<<k)+][k];
return R[ll]<R[rr]?ll:rr;
} int LCA(int u,int v)
{
int x = first[u],y = first[v];
if(x > y) swap(x,y);
return ver[RMQ(x,y)];
} void solve()
{
int n,q;
scanf("%d %d",&n,&q);
E_init();
for(int i = ; i < n-; i++)
{
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
memset(visit,,sizeof(visit));
sum = ;
dir[] = ; dfs(,);
ST(n*-); while(q--)
{
int a,b,c;
scanf("%d %d",&a,&b);
c = LCA(a,b);
printf("%d\n",dir[a]+dir[b]-*dir[c]);
} } int main(void)
{
int t;
scanf("%d",&t);
while(t--)
{
solve();
}
return ;
}

hdu 2586 (lca-RMQ)的更多相关文章

  1. HDU 2586 (LCA模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:在一个无向树上,求一条链权和. 解题思路: 0 | 1 /   \ 2      3 ...

  2. [hdu 2586]lca模板题(在线+离线两种版本)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 在线版本: 在线方法的思路很简单,就是倍增.一遍dfs得到每个节点的父亲,以及每个点的深度.然后 ...

  3. HDU 2586 ( LCA/tarjan算法模板)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:n个村庄构成一棵无根树,q次询问,求任意两个村庄之间的最短距离 思路:求出两个村庄的LCA,d ...

  4. hdu 2586(LCA在线ST)

    How far away ? Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): A ...

  5. HDU 2586 LCA

    题目大意: 多点形成一棵树,树上边有权值,给出一堆询问,求出每个询问中两个点的距离 这里求两个点的距离可以直接理解为求出两个点到根节点的权值之和,再减去2倍的最近公共祖先到根节点的距离 这是自己第一道 ...

  6. hdu - 2586 (LCA板子题)

    传送门 (这次的英文题面要比上一个容易看多了) (英语蒟蒻的卑微) 又是一个很裸的LCA题 (显然,这次不太容易打暴力咧) (但听说还是有大佬用dfs直接a掉了) 正好 趁这个机会复习一下LCA 这里 ...

  7. hdu 2586 lca在线算法(朴素算法)

    #include<stdio.h> #include<string.h>//用c/c++会爆栈,用g++ac #define inf 0x3fffffff #define N ...

  8. HDU 2586 How far away ? (LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 LCA模版题. RMQ+LCA: #include <iostream> #incl ...

  9. HDU - 2586 How far away ?(LCA模板题)

    HDU - 2586 How far away ? Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & ...

  10. hdu 2586 How far away ?倍增LCA

    hdu 2586 How far away ?倍增LCA 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路: 针对询问次数多的时候,采取倍增 ...

随机推荐

  1. bzoj1010: [HNOI2008]玩具装箱toy——斜率优化

    方程 $\Large f(i)=min(f(j)+(s(i)-s(j)-1-L)^2)$ 其中$s(i)$为i的前缀和再加上$i$ 对于某个$i$若$j$比$k$优,则 $\large f(j)+(s ...

  2. Python全栈开发:XML与parse对比

    #!/usr/bin/env python # -*- coding;utf-8 -*- """ ET.XML和ET.parse的对比 1.返回对象差异: ET.XML: ...

  3. 关于underline

    1, 有些系统可能看不到下划线的效果,这是不妨按着Alt键看看: 2, underline=#, 数字表示在哪个字母下显示下划线,从0开始

  4. vue-cli新手总结

    项目中需要用到vue-cli脚手架来搭建前端框架,对于vue小白,总结一下自己遇到的问题以及解决方案,还要学习的地方有很多. vue-cli安装下载网上有很多教程,但对于新手而言,有些地方需要自己摸索 ...

  5. 菜鸟nginx源码剖析数据结构篇(三) 单向链表 ngx_list_t[转]

    菜鸟nginx源码剖析数据结构篇(三) 单向链表 ngx_list_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...

  6. 47 Majority Element II

    原题网址; https://www.lintcode.com/problem/majority-element-ii/ 描述 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三 ...

  7. 表单单选按钮input[type="radio"]

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  8. 恭喜"微微软"喜当爹,Github嫁入豪门。

    今天是 Github 嫁入豪门的第 2 天,炒得沸沸扬扬的微软 Github 收购事件于昨天(06月04日)尘埃落定,微软最终以 75 亿美元正式收购 Github. 随后,Gitlab 趁势带了一波 ...

  9. Python学习day02 - 编程分类和Pycharm和Jupyter的安装

    编程语言分类 编程语言是用来和计算机交互的,计算机只认识0和1 机器语言(低级语言) 直接和硬件交互 用0和1和计算机沟通 优点:执行效率最高 缺点:开发效率低 汇编语言直接和硬件交互 优点(相较于机 ...

  10. myeclipse中tomcat内存大小的设置

    刚刚安装了myeclipse9.0,又配置了tomcat7.0,想用ssh框架搭个项目试试tomcat7.0,没想到刚启动项目就会报错,在tomcat6.0中就不会有问题,上网查了那些都不起作用,后来 ...