用树链剖分求LCA的模板;

 1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4 const int maxn=40005;
5 int n,m;
6 int head[maxn],to[maxn<<1],w[maxn<<1],nxt[maxn<<1],tot;
7 int fa[maxn],dep[maxn],son[maxn],top[maxn],size[maxn],dis[maxn];
8
9 void add(int x,int y,int z){
10 nxt[++tot]=head[x];
11 head[x]=tot;
12 to[tot]=y;
13 w[tot]=z;
14 }
15
16 void dfs1(int u,int f){
17 fa[u]=f,size[u]=1,dep[u]=dep[f]+1;
18 for(int i=head[u];i;i=nxt[i]){
19 int v=to[i];
20 if(v==f) continue;
21 dis[v]=dis[u]+w[i];
22 dfs1(v,u);
23 size[u]+=size[v];
24 if(size[v]>size[son[u]]) son[u]=v;
25 }
26 }
27
28 void dfs2(int u){
29 if(u==son[fa[u]]) top[u]=top[fa[u]];
30 else top[u]=u;//求top数组
31 for(int i=head[u];i;i=nxt[i]){
32 int v=to[i];
33 if(v!=fa[u]) dfs2(v);
34 }
35 }
36
37 int LCA(int u,int v){
38 while(top[u]!=top[v]){
39 if(dep[top[u]]>dep[top[v]]) u=fa[top[u]];
40 else v=fa[top[v]];
41 }
42 return dep[u]>dep[v]?v:u;
43 }
44
45 int main(){
46 int T;
47 scanf("%d",&T);
48 while(T--){
49 scanf("%d%d",&n,&m);
50 for(int i=1;i<=n;i++) head[i]=dep[i]=dis[i]=son[i]=0;
51 tot=0;
52 for(int i=1;i<n;i++){
53 int x,y,z;
54 scanf("%d%d%d",&x,&y,&z);
55 add(x,y,z);add(y,x,z);
56 }
57 dfs1(1,0);
58 dfs2(1);
59 for(int i=1;i<=m;i++){
60 int x,y;
61 scanf("%d%d",&x,&y);
62 int k=LCA(x,y);
63 printf("%d\n",dis[x]+dis[y]-2*dis[k]);
64 }
65 }
66 return 0;
67 }

最新文章

  1. 【2016-10-16】【坚持学习】【Day7】【建造者模式】
  2. asp.net mvc 过滤器
  3. 《C与指针》第八章练习
  4. JSP页面以及简单的指令
  5. Python Webk框架学习 Flask
  6. express 4 中 session的处理(仅为博主笔记)
  7. 让一个小Div(子)在大Div(父)中垂直水平都居中
  8. Form_Form树形结构HTree的介绍(案例)
  9. 机器学习之单变量线性回归(Linear Regression with One Variable)
  10. Jquery 自定义事件实现发布/订阅
  11. 黑马程序员-IO(二)
  12. Python新手学习基础之数据结构-列表1
  13. centos编译内核:no space left on device 解
  14. .Net 异步随手记(三)
  15. 初学Java Web(6)——JSP学习总结
  16. 安装Pygame(Python3.6,windows)
  17. Python:Day40 html
  18. Eclipse创建第一个Spring Boot项目
  19. Hello SIP Protocol
  20. springboot深入学习(三)-----docker

热门文章

  1. HashSet集合存储数据的结构(哈希表)和Set集合存储㢝不重复的原理
  2. Vxe-table 高亮当前行
  3. DP の 百题大过关(5/100)
  4. wdos centos64位通过yum来升级PHP
  5. PerfView专题 (第一篇):如何寻找热点函数
  6. Java-文件File简单实用
  7. [网鼎杯2018]Unfinish-1|SQL注入|二次注入
  8. Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。
  9. 对DDD使用的一些建议
  10. 第九十九篇:JS闭包