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 思路: 针对询问次数多的时候,采取倍增 ...
随机推荐
- Python全栈开发:Mysql(一)
一.概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL Serve ...
- uoj33 树上GCD
题意:给你一棵树,根节点为1,每条边长度为1.定义f(u,v)=gcd(u-lca(u,v),lca(u,v)-v),求有多少个无序点对f(u,v)=i.对每个i输出答案. n<=20W. 标程 ...
- bzoj1913: [Apio2010]signaling 信号覆盖
传送门 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #includ ...
- java分析工具arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar --target-ip 0.0.0.0
- Android之LinearLayout线性布局
1.相关术语解释 orientation 子控件的排列方式,horizontal(水平)和vertical(垂直默认)两种方式! gravity 子控件的对齐方式,多个组合 layout_gravit ...
- iOS之CALayer属性简介
/* CoreAnimation - CALayer.h Copyright (c) 2006-2017, Apple Inc. All rights reserved. */ #import < ...
- HTML 排版标记
<p></p> : 表示一个段落 常用属性 : align : 水平对齐方式 取值 :left center right 和Word文档一样 : 段落有空行 <br ...
- nginx源码分析——内存池
内存池的目的就是管理内存,使回收内存可以自动化一些. ngx_palloc.h /* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. * ...
- 通过three.js实现简易3D打印模型切片展示
现在的页面展示要求越来越高,美的展示总能吸引更多的访客.最近在学习3D打印中的切片算法,刚刚入门,发现通过three.js框架可以很好展示出3D切片细节(虽然我做的比较简单). //========= ...
- conda、pip换源以及conda、pip命令比较
conda换源: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda ...