HDU - 2586 How far away ?(离线Tarjan算法)
1、给定一棵树,每条边都有一定的权值,q次询问,每次询问某两点间的距离。
2、这样就可以用LCA来解,首先找到u, v 两点的lca,然后计算一下距离值就可以了。
这里的计算方法是,记下根结点到任意一点的距离dis[],这样ans = dis[u] + dis[v] - 2 * dis[lca(u, v)]
3、
![](/assets/blank.gif)
![](/assets/blank.gif)
/* 离线算法,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算法)相关推荐
- POJ 1330 LCA最近公共祖先 离线tarjan算法
题意要求一棵树上,两个点的最近公共祖先 即LCA 现学了一下LCA-Tarjan算法,还挺好理解的,这是个离线的算法,先把询问存贮起来,在一遍dfs过程中,找到了对应的询问点,即可输出 原理用了并查集 ...
- 【HDU - 1269】迷宫城堡 (tarjan算法模板)
题干: 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只 ...
- 【HDU 1269】迷宫城堡 (Tarjan算法)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 有向图强连通分量tarjan算法
转自:http://www.byvoid.com/blog/scc-tarjan/ http://blog.csdn.net/geniusluzh/article/details/6601514 在有 ...
- 【转】BYV--有向图强连通分量的Tarjan算法
转自beyond the void 的博客: https://www.byvoid.com/zhs/blog/scc-tarjan 注:红色为标注部分 [有向图强连通分量] 在有向图G中,如果两个顶点 ...
- byvoid 神牛的tarjan算法讲解!
[有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通 (strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图 .非强连通图有向图 ...
- 有向图强连通分量的Tarjan算法——转自BYVoid
[有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...
- [转载] 有向图强连通分量的Tarjan算法 ——byvoid
[有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...
- 有向图强连通分量的Tarjan算法
有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大 ...
最新文章
- 树链剖分 or 根号分治 + dfs序 + 树状数组 ---- CF1254 D. Tree Queries
- Unity扩展编辑器二
- UVA 294 - Divisors (唯一分解)
- loader调用过程
- include_fns.php_管理页面
- 《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI
- 大爷与支付宝同名,曾想状告阿里巴巴侵权,现在过得怎么样
- “命令终端”的实现2-字符读取及按键控制
- python psutil替代_Python2.7 psutil模块
- PHP 判断点是否在多边形内
- 详解Angular开发中的登陆与身份验证
- UMl user guide读书笔记
- 计算机动画---计算机动画的光栅方法
- 张宇1000题高等数学 第十、十一、十二章 一元函数积分学的应用——几何应用、积分等式与积分不等式、物理应用
- 玩盲盒的泡泡玛特,美妆零售盒里究竟藏有什么“秘密”?
- ArcGIS 制作中国区的数字高程DEM地图(附中国区STRM 90m DEM百度云免费下载链接)
- hl7 java_HL7 2.X解析(JAVA版)
- FPGA实现IIC协议(一)----初识IIC总线
- 【大数据架构】浅谈数据中台
- 原生js制作扫雷-自定义难度
热门文章
- D3 scaleOrdinal
- echarts box
- 通过Server 2019中的组策略部署桌面墙纸 详解组策略环回处理
- 游戏盾 > 产品简介 > 产品优势
- Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
- Maven学习总结(47)——Maven常用命令再总结
- Linux学习总结(36)——创建、复制、剪切、重命名、清空和删除文件夹的命令
- Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- android主题资源,使用 Theme Editor 设计应用主题背景
- php文件下载不完整,求帮看下这段PHP下载MP4文件的有关问题,文件下载不完整