1、给定一棵树,每条边都有一定的权值,q次询问,每次询问某两点间的距离。

2、这样就可以用LCA来解,首先找到u, v 两点的lca,然后计算一下距离值就可以了。

这里的计算方法是,记下根结点到任意一点的距离dis[],这样ans = dis[u] + dis[v] - 2 * dis[lca(u, v)]

3、

/*
离线算法,LCATarjan
复杂度O(n+Q);
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;const int MAXN=40005;
const int MAXQ=205;//查询数的最大值int dis[MAXN];//到根节点的距离//并查集部分
int F[MAXN];//需要初始化为-1
int find(int x){if(F[x]==-1)return x;return F[x]=find(F[x]);
}
void bing(int u,int v){int t1=find(u);int t2=find(v);if(t1!=t2)F[t1]=t2;
}
//***********************
bool vis[MAXN];//访问标记
int ancestor[MAXN];//祖先
struct Edge{int to,next;int d;
}edge[MAXN*2];
int head[MAXN],tot;
void addedge(int u,int v,int d){edge[tot].to=v;edge[tot].d=d;edge[tot].next=head[u];head[u]=tot++;
}struct Query{int q,next;int index;//查询编号
}query[MAXQ*2];
int answer[MAXQ];//存储最后的查询结果,下标0 Q-1
int h[MAXN];//注意此处为MAXN...
int tt;void add_query(int u,int v,int index){query[tt].q=v;query[tt].next=h[u];query[tt].index=index;h[u]=tt++;query[tt].q=u;query[tt].next=h[v];query[tt].index=index;h[v]=tt++;
}void init(){tot=0;memset(head,-1,sizeof(head));tt=0;memset(h,-1,sizeof(h));memset(vis,false,sizeof(vis));memset(F,-1,sizeof(F));memset(ancestor,0,sizeof(ancestor));
}
void LCA(int u){ancestor[u]=u;vis[u]=true;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;if(vis[v])continue;dis[v]=dis[u]+edge[i].d;LCA(v);bing(u,v);ancestor[find(u)]=u;}for(int i=h[u];i!=-1;i=query[i].next){int v=query[i].q;if(vis[v]){answer[query[i].index]=ancestor[find(v)];}}
}int main(){int T;int n,m;int i;int u,v,d;scanf("%d",&T);while(T--){init();scanf("%d%d",&n,&m);for(i=0;i<n-1;++i){scanf("%d%d%d",&u,&v,&d);addedge(u,v,d);addedge(v,u,d);}for(i=0;i<m;++i){scanf("%d%d",&u,&v);add_query(u,v,i);}dis[1]=0;LCA(1);for(i=0;i<m;++i){printf("%d\n",dis[query[i*2].q]+dis[query[i*2+1].q]-2*dis[answer[i]]);}}return 0;
}

View Code

转载于:https://www.cnblogs.com/bofengyu/p/4963515.html

HDU - 2586 How far away ?(离线Tarjan算法)相关推荐

  1. POJ 1330 LCA最近公共祖先 离线tarjan算法

    题意要求一棵树上,两个点的最近公共祖先 即LCA 现学了一下LCA-Tarjan算法,还挺好理解的,这是个离线的算法,先把询问存贮起来,在一遍dfs过程中,找到了对应的询问点,即可输出 原理用了并查集 ...

  2. 【HDU - 1269】迷宫城堡 (tarjan算法模板)

    题干: 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只 ...

  3. 【HDU 1269】迷宫城堡 (Tarjan算法)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. 有向图强连通分量tarjan算法

    转自:http://www.byvoid.com/blog/scc-tarjan/ http://blog.csdn.net/geniusluzh/article/details/6601514 在有 ...

  5. 【转】BYV--有向图强连通分量的Tarjan算法

    转自beyond the void 的博客: https://www.byvoid.com/zhs/blog/scc-tarjan 注:红色为标注部分 [有向图强连通分量] 在有向图G中,如果两个顶点 ...

  6. byvoid 神牛的tarjan算法讲解!

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通 (strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图 .非强连通图有向图 ...

  7. 有向图强连通分量的Tarjan算法——转自BYVoid

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...

  8. [转载] 有向图强连通分量的Tarjan算法 ——byvoid

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...

  9. 有向图强连通分量的Tarjan算法

    有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大 ...

最新文章

  1. 树链剖分 or 根号分治 + dfs序 + 树状数组 ---- CF1254 D. Tree Queries
  2. Unity扩展编辑器二
  3. UVA 294 - Divisors (唯一分解)
  4. loader调用过程
  5. include_fns.php_管理页面
  6. 《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI
  7. 大爷与支付宝同名,曾想状告阿里巴巴侵权,现在过得怎么样
  8. “命令终端”的实现2-字符读取及按键控制
  9. python psutil替代_Python2.7 psutil模块
  10. PHP 判断点是否在多边形内
  11. 详解Angular开发中的登陆与身份验证
  12. UMl user guide读书笔记
  13. 计算机动画---计算机动画的光栅方法
  14. 张宇1000题高等数学 第十、十一、十二章 一元函数积分学的应用——几何应用、积分等式与积分不等式、物理应用
  15. 玩盲盒的泡泡玛特,美妆零售盒里究竟藏有什么“秘密”?
  16. ArcGIS 制作中国区的数字高程DEM地图(附中国区STRM 90m DEM百度云免费下载链接)
  17. hl7 java_HL7 2.X解析(JAVA版)
  18. FPGA实现IIC协议(一)----初识IIC总线
  19. 【大数据架构】浅谈数据中台
  20. 原生js制作扫雷-自定义难度

热门文章

  1. D3 scaleOrdinal
  2. echarts box
  3. 通过Server 2019中的组策略部署桌面墙纸 详解组策略环回处理
  4. 游戏盾 > 产品简介 > 产品优势
  5. Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
  6. Maven学习总结(47)——Maven常用命令再总结
  7. Linux学习总结(36)——创建、复制、剪切、重命名、清空和删除文件夹的命令
  8. Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
  9. android主题资源,使用 Theme Editor 设计应用主题背景
  10. php文件下载不完整,求帮看下这段PHP下载MP4文件的有关问题,文件下载不完整