最近的共同祖先反复问的问题。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std; const int MAXN = 40000 + 10;
struct Edge{
int to,cost;
Edge(){};
Edge(int _to,int _cost)
:to(_to),cost(_cost){};
}; vector<Edge> tree[MAXN];
vector<Edge> Qes[MAXN];
int degree[MAXN];
int f[MAXN];
bool vst[MAXN];
int dist[MAXN];
int ancestor[MAXN];
int ans[MAXN];
int rank[MAXN];
int N,M; void init(){
for(int i = 0;i <= N;++i){
degree[i] = 0;
f[i] = i;
ans[i] = -1;
rank[i] = 0;
dist[i] = 0;
vst[i] = false;
ancestor[i] = -1;
tree[i].clear();
Qes[i].clear();
}
} int Find(int x){
if(x == f[x])
return x;
return f[x] = Find(f[x]);
} void LCA(int u){
int sz = tree[u].size();
for(int i = 0;i < sz;++i){
Edge& e = tree[u][i];
if(!vst[e.to]){
vst[e.to] = 1;
dist[e.to] = dist[u] + e.cost;
LCA(e.to);
f[e.to] = u;
int k = Qes[e.to].size();
for(int j = 0;j < k;++j){
Edge& et = Qes[e.to][j];
if(vst[et.to]&&ans[et.cost] == -1){ //还未遍历到
if(et.to == e.to) ans[et.cost] = 0;
else ans[et.cost] = dist[e.to] + dist[et.to] - 2*dist[Find(et.to)];
}
}
}
}
} int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M);
init();
int x,y,c;
for(int i = 1;i < N;++i){
scanf("%d%d%d",&x,&y,&c);
tree[x].push_back(Edge(y,c));
tree[y].push_back(Edge(x,c));
} for(int i = 0;i < M;++i){
scanf("%d%d",&x,&y);
Qes[x].push_back(Edge(y,i));
Qes[y].push_back(Edge(x,i));
} vst[1] = 1;
LCA(1); for(int i = 0;i < M;++i){
printf("%d\n",ans[i]);
}
}
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

HDU2586的更多相关文章

  1. LCA在线算法(hdu2586)

    hdu2586 How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  2. poj1330+hdu2586 LCA离线算法

    整整花了一天学习了LCA,tarjan的离线算法,就切了2个题. 第一题,给一棵树,一次查询,求LCA.2DFS+并查集,利用深度优先的特点,回溯的时候U和U的子孙的LCA是U,U和U的兄弟结点的子孙 ...

  3. LCA 离线的Tarjan算法 poj1330 hdu2586

    LCA问题有好几种做法,用到(tarjan)图拉算法的就有3种.具体可以看邝斌的博客.http://www.cnblogs.com/kuangbin/category/415390.html 几天的学 ...

  4. hdu2586 LCA

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. How far away[HDU2586]

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  6. HDU2586 How far away ?(LCA模板题)

    题目链接:传送门 题意: 给定一棵树,求两个点之间的距离. 分析: LCA 的模板题目 ans = dis[u]+dis[v] - 2*dis[lca(u,v)]; 在线算法:详细解说 传送门 代码例 ...

  7. HDU2586 How far away ? 邻接表+DFS

    题目大意:n个房子,m次询问.接下来给出n-1行数据,每行数据有u,v,w三个数,代表u到v的距离为w(双向),值得注意的是所修建的道路不会经过一座房子超过一次.m次询问,每次询问给出u,v求u,v之 ...

  8. hdu2586 lca倍增法

    倍增法加了边的权值,bfs的时候顺便把每个点深度求出来即可 #include<iostream> #include<cstring> #include<cstdio> ...

  9. 模板倍增LCA 求树上两点距离 hdu2586

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 课上给的ppt里的模板是错的,wa了一下午orz.最近总是被坑啊... 题解:树上两点距离转化为到根的距离 ...

随机推荐

  1. 导致Asp.Net站点重启的10个原因

    原文:导致Asp.Net站点重启的10个原因 Asp.Net站点有时候会莫名其妙的重启,什么原因导致的却不得而知,经过一番折腾后,我总结了导致Asp.Net站点重启的10个原因 1. 回收应用程序池会 ...

  2. ubuntu 下安装crypto

    直接运行apt-get install python-crypto 就好了

  3. 使用JMX实现的内存监控(转)

    public final class MemoryWarningSystem { private static MemoryWarningSystem m_instance = null; /** * ...

  4. Chapter06-Phylogenetic Trees Inherited(POJ 2414)(减少国家DP)

    Phylogenetic Trees Inherited Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 480 Accepted ...

  5. Android做法说明(3)---Fragment使用app袋或v4包解析

    Android做法说明(3)---Fragment使用app袋或v4包解析 1)问题简述 相信非常多的朋友在调用Fragment都会遇到以下的情况: watermark/2/text/aHR0cDov ...

  6. 【Leetcode】Partition List (Swap)

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  7. LVM pvcreate,vgcreate,lvcreate,mkfs

    首先介绍LVM的几个概念:     1. 物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file).物理卷包 ...

  8. 不一样的是不一样的,我的独家滚动条------Day35

    在您开始建立自己的,感觉应该先录一个概念:内核的浏览器. 兼容性问题之前多次提及,而在平时经常会遇到兼容性问题.原因,就在于它:浏览器内核.这是比較通俗的说法,事实上应该把它描写叙述的专业点:Rend ...

  9. Centos根据系统VPS安装SendMail组件使WordPress支持E-mail

    1.在putty在链接: yum install sendmail 2.启动SendMail: service sendmail start 3.检查SendMail是否在监听默认的25port: n ...

  10. 具体解释首页被K后SEOer必做的三大排除方法!

    近段时间.有非常多朋友向新辰抱怨说出大问题了,为神马site不到首页了,并且收录变成了0?唉,新辰不得不非常同情的告诉你:你的首页真的被K了!好了.作为一个职业SEOer.面对被K宛如已经看破红尘般没 ...