hdu 2586 How far away? (LCA模板)
题意:
N个点,形成一棵树,边有长度。
M个询问,每个询问(a,b),询问a和b的距离
思路:
模板题,看代码。DFS预处理算出每个结点离根结点的距离。
注意:
qhead[maxn],而不是qhead[maxm]。
输出用%I64d,不要用%lld。
C++ RE后 尝试用 G++交。
代码:
struct node{
int to,w,next,lca;
};
int const maxn = 40005;
int const maxm = 205;
int fa[maxn];
int head[maxn], qhead[maxn];
int cnt1,cnt2;
ll d[maxn];
ll res[maxm*2];
bool vis[maxn];
node edge[2*maxn];
node qedge[2*maxm];
int n,m;
int findFa(int x){
return fa[x]==x?x:fa[x]=findFa(fa[x]);
}
inline void Addedge(int u,int v,int w){
edge[++cnt1].w=w, edge[cnt1].to=v, edge[cnt1].next=head[u], head[u]=cnt1;
edge[++cnt1].w=w, edge[cnt1].to=u, edge[cnt1].next=head[v], head[v]=cnt1;
}
inline void Addqedge(int u,int v){
qedge[++cnt2].to=v, qedge[cnt2].next=qhead[u], qhead[u]=cnt2;
qedge[++cnt2].to=u, qedge[cnt2].next=qhead[v], qhead[v]=cnt2;
}
void dfs(int u,int fa,ll w){
d[u]=w;
for(int i=head[u];i!=-1;i=edge[i].next){
int v=edge[i].to;
if(v==fa) continue;
dfs(v,u,w+edge[i].w);
}
}
void Tarjan_LCA(int u){
fa[u]=u, vis[u]=true;
for(int i=head[u];i!=-1;i=edge[i].next){
if(!vis[edge[i].to]){ //防止访问到父亲
Tarjan_LCA(edge[i].to);
fa[edge[i].to]=u;
}
}
for(int i=qhead[u];i!=-1;i=qedge[i].next){
if(vis[qedge[i].to]){
qedge[i].lca=findFa(qedge[i].to);
res[i]=d[u]+d[qedge[i].to]-2*d[qedge[i].lca];
}
}
}
void init(){
rep(i,1,n) fa[i]=i;
mem(head,-1); mem(qhead,-1); mem(vis,false); mem(d,0); mem(res,0);
cnt1=cnt2=0;
}
int T,a,b,w;
int main(){
cin>>T;
while(T--){
scanf("%d%d",&n,&m);
init();
rep(i,1,n-1){
scanf("%d%d%d",&a,&b,&w);;
Addedge(a,b,w);
}
rep(i,1,m){
scanf("%d%d",&a,&b);
Addqedge(a,b);
}
dfs(1,-1,0);
Tarjan_LCA(1);
for(int i=1;i<=cnt2;i+=2){
if(res[i])
printf("%I64d\n",res[i]);
else
printf("%I64d\n",res[i+1]);
}
}
}
hdu 2586 How far away? (LCA模板)的更多相关文章
- hdu 2586(最近公共祖先LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路:在求解最近公共祖先的问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好 ...
- HDU 2586 How far away? LCA 转化成RMQ
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 [题意] 给出一个N 个和N-1条边的连通图,询问任意两点间的距离.N<=40000 . [分 ...
- HDU 2586 How far away(LCA+邻接表)
How far away &题解: 和上篇是一样的题,这用的是lca方法做的, 不知道为什么,把数组开到80000 就a了 >_< 哈 我现在知道为什么了,因为我的rmq数组没有乘 ...
- HDU 2586 倍增法求lca
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- TTTTTTTTTTTTTTTTT HDU 2586 How far away LCA的离线算法 Tarjan
链接: How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 最近公共祖先(LCA)模板
以下转自:https://www.cnblogs.com/JVxie/p/4854719.html 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖 ...
- 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模板题】
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2586 How far away?(LCA模板题+离线tarjan算法)
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2586 How far away ?倍增LCA
hdu 2586 How far away ?倍增LCA 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路: 针对询问次数多的时候,采取倍增 ...
随机推荐
- 洛谷P1308——单词统计
https://www.luogu.org/problem/show?pid=1308 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在 ...
- 3.17学习总结.listview用法总结
今天复习了listview控件的用法. 1.activity_main.xml 中的代码,如下: <?xml version="1.0" encoding="utf ...
- 一、java基础补充
1.java执行流程 源文件由编译器编译成字节码(ByteCode),也就是.class文件 字节码由java虚拟机解释运行 通过命令行操作java程序: javac test.java java t ...
- CentOS Linux 简单安装 clickhouse
本文只是仅仅的介绍安装 至于更多介绍请自信百度 1.本人 linux版本 [root@localhost /]# cat /etc/redhat-releaseCentOS Linux release ...
- csv或excel的utf-8乱码问题
方法1.数据导入 打开 Excel,执行"数据"->"自文本",选择 CSV 文件,出现文本导入向导,选择"分隔符号",下一步,勾选& ...
- charles中Map、Rewrite、Breakpoints的区别
Charles提供了Map功能.Rewrite功能.Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是: Map Map功能适合长期的将某些请求重定向到另一个网络地址或本地 ...
- shell 脚本获取数组字符串长度
#!/bin/sh source /etc/init.d/functions funOne() { array=(I am dfh kjlhfjksdf sdfj jdkfhaskl mjjoldfu ...
- VMware安装最新版CentOS7图文教程
https://blog.csdn.net/reticent_man/article/details/80732395 https://blog.csdn.net/q2158798/article/d ...
- Centos7.6安装python3.6.8
yum -y install bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel tk-devel ...
- python学习2-博客-蓝图
#!/usr/bin/env python # -*- coding: UTF-8 -*- from flask import Blueprint,Flask #这里创建了一个名称为 'admin' ...