hdu 2586 (lca-RMQ)
#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)的更多相关文章
- HDU 2586 (LCA模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:在一个无向树上,求一条链权和. 解题思路: 0 | 1 / \ 2 3 ...
- [hdu 2586]lca模板题(在线+离线两种版本)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 在线版本: 在线方法的思路很简单,就是倍增.一遍dfs得到每个节点的父亲,以及每个点的深度.然后 ...
- HDU 2586 ( LCA/tarjan算法模板)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:n个村庄构成一棵无根树,q次询问,求任意两个村庄之间的最短距离 思路:求出两个村庄的LCA,d ...
- hdu 2586(LCA在线ST)
How far away ? Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): A ...
- HDU 2586 LCA
题目大意: 多点形成一棵树,树上边有权值,给出一堆询问,求出每个询问中两个点的距离 这里求两个点的距离可以直接理解为求出两个点到根节点的权值之和,再减去2倍的最近公共祖先到根节点的距离 这是自己第一道 ...
- hdu - 2586 (LCA板子题)
传送门 (这次的英文题面要比上一个容易看多了) (英语蒟蒻的卑微) 又是一个很裸的LCA题 (显然,这次不太容易打暴力咧) (但听说还是有大佬用dfs直接a掉了) 正好 趁这个机会复习一下LCA 这里 ...
- hdu 2586 lca在线算法(朴素算法)
#include<stdio.h> #include<string.h>//用c/c++会爆栈,用g++ac #define inf 0x3fffffff #define N ...
- HDU 2586 How far away ? (LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 LCA模版题. RMQ+LCA: #include <iostream> #incl ...
- HDU - 2586 How far away ?(LCA模板题)
HDU - 2586 How far away ? Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- hdu 2586 How far away ?倍增LCA
hdu 2586 How far away ?倍增LCA 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路: 针对询问次数多的时候,采取倍增 ...
随机推荐
- NOIP2018游记 & 退役记
NOIP2018游记 & 退役记 我是一名来自湖北武汉华中师大一附中的高二\(OIer\),学习\(OI\)一年,今年去参加\(NOIP\),然后退役.这是一篇\(NOIP2018\)的游记, ...
- 性能分析神器VisualVM【转】
性能分析神器VisualVM[转] Posted on 2015-04-17 09:37 WadeXu 阅读(5809) 评论(6) 编辑 收藏 VisualVM 是一款免费的,集成了多个 JDK 命 ...
- Java序列化接口的作用总结1
一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了. ...
- day 36 MySQL的库、表的详细操作
MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset u ...
- 《DSP using MATLAB》Problem 8.2
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- C#获取七牛云token/删除七牛云图片接口
// 获取七牛token public ApiResponse GetQiniuToken(QiniuToken req) { try { Mac mac = new Mac(req.AccessKe ...
- jQuery实现textarea高度根据内容自适应
//jQuery实现textarea高度根据内容自适应 $.fn.extend({ txtaAutoHeight: function () { return this.each(function () ...
- mongodb什么时候使用
转自:https://blog.csdn.net/justlpf/article/details/80392944 简介 MongoDB[1] 是一个基于分布式文件存储的数据库.由C 语言编写.旨在为 ...
- 【error】vue-style-loader didn't discriminate between server and client
出现这个bug的时候,设置为false
- 深入了解组件- -- 动态组件 & 异步组件
gitHub地址:https://github.com/huangpna/vue_learn/example里面的lesson11 一 在动态组件上使用keep-alive 在这之前我们已经有学习过用 ...