E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
hdu2586
十四届蓝桥杯C/C++B组 I题 倍增LCA 带权
OIwiki地址模板题地址
HDU2586
通过计算LCA算出最近公共祖先,然后通过:dist[u]+dist[v]−2∗dist[lca(u,v)];dist[u]+dist[v]-2*dist[lca(
万伏小太阳
·
2023-04-13 20:16
蓝桥杯
c语言
c++
HDU2586
How far away ?(tarjan+并查集离线求lca)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2586这题大概是个模板题,又学了一个新姿势。先dfs一遍,求出每个点到根节点的距离。然后将询问离线,开始求lca,在dfs的时候同时更新并查集,就能求出当前位置下的已访问过的两个点的lca,两个点(a,b)的距离就是d[a]+d[b]-2*d[lca(a,b)];#include#include#incl
xtttgo
·
2020-09-17 14:13
DFS
HDU2586
【LCA在线算法】
求树上两两之间距离。思路:在一棵树上,dis[index]代表root到index的距离,u,v的最短距离那不就是:dis[u]+dis[v]-2*dis[LCA(u,v)];然后这边可能有多棵树,先利用并查集并一下,然后拿结点0,把所有的根连起来,DFS,ST表,然后RMQ,就可以在线查询LCA了。如过LCA(u,v)=0,没有;否则:dis[u]+dis[v]-2*dis[LCA(u,v)];
keyboarder_zsq
·
2020-09-17 10:54
LCA
hdu2586
(LCA 用并查集+DFS实现)
ViewCode#include#defineMAXN40010usingnamespacestd;structGraph{intvex,next,dis;};Graphg[MAXN*2],Q[400];intfirst[MAXN],head[MAXN],set[MAXN],away[MAXN],n,m;boolvisited[MAXN];//first[v]用来查找节点所在边,即g[first[
weixin_30576827
·
2020-09-17 10:34
hdu2586
(How far away ?)
Howfaraway?TimeLimit:2000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):2561AcceptedSubmission(s):946ProblemDescriptionTherearenhousesinthevillageandsomebidirectionalroads
Msro
·
2020-08-18 04:26
最近公共祖先LCA(Tarjan(离线)算法)&& poj1330 &&
hdu2586
注:这篇文章关于算法解释部分参考☞:http://www.cnblogs.com/JVxie/p/4854719.html这位大佬写的特别详细,然后我在这个的基础上又增加了两道例题,更方便大家理解首先是最近公共祖先的概念(什么是最近公共祖先?):在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。换句话说,就是两个点在这棵树上距离
竟然有人也叫Webwei
·
2020-08-13 18:50
算法
Tarjan离线算法求最近公共祖先(LCA)
Tarjan离线算法求LCA介绍前言:首先,本人搞懂Tarjan求最近公共祖先(LCA),也是浏览了大量其他网友大牛的文章,若是看了本文仍未弄懂的,可以尝试自己做一下模板题(裸题)
HDU2586
,自己用数据去感受一下
csyzcyj
·
2020-08-01 09:57
算法简介
HDU2586
How far away ?(树上倍增求LCA)
题目链接TimeLimit:2000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):25284AcceptedSubmission(s):10051ProblemDescriptionTherearenhousesinthevillageandsomebidirectionalroadsconn
对你说的对
·
2020-07-29 19:53
数据结构
lca倍增算法
HDU2586
要注意只有简单边相连的图是一棵树,树有n-1条边倍增之前要先存双向边,以任意顶点为根(比如1)dfs遍历确定树。
zz_ylolita
·
2020-07-06 14:13
经典算法程序
图论
数据结构
hdu2586
How far away ?(树上倍增+LCA+树上两点之间的距离)
Howfaraway?TimeLimit:2000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):22960AcceptedSubmission(s):9073ProblemDescriptionTherearenhousesinthevillageandsomebidirectionalroa
橘子很酸
·
2020-07-04 10:59
图论
树上倍增
LCA
HDU2586
(LCA问题)
(important)树中root到每一个node都存在唯一路径,//dfs(root)dis[node]求出root到node节点的距离//solen(u,v)=dis[u]+dis[v]-2dis[LCA(u,v)];//LCA比较简单不谈,但初始化要放在函数外,很奇怪,坑了我1h//实锤水题垃圾#include#include#include#include#includeusingname
chengyulala
·
2019-09-26 14:00
LCA 最近公共祖先(模板)
HDU2586
离线与在线算法
http://acm.hdu.edu.cn/showproblem.php?pid=2586最近做树形DP和树形结构时,发现LCA这个东西有点家常,而以前也只会离线算法,现在补一下这个知识点,在这里丢两个模板。在线倍增算法,感觉也不是很难,当你真正的了解了倍增的意思,这个算法真的就不难了。首先p[i][j]表示i结点的第2^j个父亲结点,初始化也很简单,p[i][j]=p[p[i][j-1]][j
KXL5180
·
2019-05-21 17:10
ACM题解
图论
HDU2586
(LCA树上倍增模板)
题意:给你一棵树树上任意两节点有且仅有一条路径可以到达,问求任意两节点间的距离题解:LCA树上倍增o#include#include#include#include#include#include#includeusingnamespacestd;#defineclr(a,b)memset(a,b,sizeof(a))#defineilinlinetypedeflonglongll;constin
不楸
·
2018-12-04 21:59
图论
HDU 2586 How far away ?(LCA Tarjan/树上倍增)
HDU2586
题目:问任意两个点之间的最短路径长。
语海与冰
·
2018-11-12 20:25
数据结构
图论
LCA
HDU2586
LCA板题 在线倍增
LCA最近公共祖先(LowestCommonAncestor)对于有根树T的两个结点u、v,最近公共祖先LCA(u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大(离u和v最近的那个)。主要是用于处理树上任意点对间的距离。(多次问询很优秀叭)在线倍增求LCA算法大体思路:(具体代码实现理解原理于注释中给出)dep[]每个结点距离根节点1的深度,dis[]每个结点距离根节点1的距离,p[
OtterVV
·
2018-08-20 18:42
ACM
LCA
【
hdu2586
】How far away? lca
题意:给棵树询问树上两点距离lca板子#include#include#include#include#definelim80500usingnamespacestd;intT,n,m,tot;intf[lim][31],v[lim],c[lim],head[lim],nextt[lim],dist[lim],depth[lim];voidadd_edge(intx,inty,intz){v[++
Mininda
·
2017-12-31 11:14
图论-LCA
其他题库
【
HDU2586
】How far away ?【离线】【TarjanLCA】
【题目链接】学习一发高端的TarjanLCA。注意并查集合并时必须用v的父亲与u的父亲合并。/*Pigonometry*/ #include #include #include #include usingnamespacestd; constintmaxn=40005,maxm=205; intn,m,head[maxn],cnt,fa[maxn],dis[maxn],vis[maxn],
BraketBN
·
2016-04-07 09:00
HDU2586
How far away ? LCA_Tarjan解法
Howfaraway?TimeLimit:2000/1000MS(Java/Others) MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):10580 AcceptedSubmission(s):3851ProblemDescriptionTherearenhousesinthevillageandsomebidirect
FTQOOO
·
2016-02-26 15:00
LCA
Tarjan
hduoj
HDU2586
(LCA应用:在带权树中求任意两点之间的距离)
Howfaraway?TimeLimit:2000/1000MS(Java/Others) MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):10412 AcceptedSubmission(s):3777ProblemDescriptionTherearenhousesinthevillageandsomebidirect
baneHunter
·
2016-01-31 14:00
倍增法LCA
hdu2586
How far away ?
传送门:点击打开链接题意:给你一棵树,每条边有权值,求两点之间的最短距离思路:裸LCA。这里主要练习一下倍增法,感觉这种思路和代码实现很简单,而且能感觉实用性很大的,很值得学习倍增法要理解对2的次方的枚举顺序如果是要走固定步数,那么顺序枚举与i位与为1就行如果是要求一个临界位置,那么要从大到小枚举#include #include #include #include #include #inclu
qwb492859377
·
2015-12-08 20:00
How far away[
HDU2586
]
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3423 Accepted Submission(s): 1274
·
2015-11-13 22:52
HDU
hdu2586
(How far away ?)
&n
·
2015-11-13 15:12
HDU
hdu2586
(How far away ?)
&n
·
2015-11-13 06:21
HDU
HDU2586
LCA
题意:给定n个点,n-1条边,每两个点之间的路独一无二 LCA View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 const int maxn = 40005; 5 int head[ maxn ],cnt; 6 struct n
·
2015-11-13 05:24
HDU
hdu2586
(LCA最近公共祖先)
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3653 Accepted Submission(s): 1379
·
2015-11-10 22:09
HDU
LCA在线算法(
hdu2586
)
hdu2586
How far away ?
·
2015-11-08 14:28
HDU
hdu2586
LCA
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路:在求解最近公共祖先的问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好的处理技巧就是在回溯到结点u的时候,u的子树已经遍历, 这时候才把u结点放入合并集合中,这样u结点和所有u的子树中的结点的最近公共祖先就是u了,u和还未遍历的所有u的兄弟结点及子树中的最近公共祖先就
·
2015-11-02 11:25
HDU
LCA-Tarjan算法
下面以
HDU2586
为例简单说一下。 【题意】给定一棵树,每条边都有一定的权值(40000个点),q次询问(500次),每次询问某两点间的距离。
·
2015-11-01 10:14
tar
离线LCA
hdu2586
How far away ?
传送门:点击打开链接题意:一棵树,告诉你两个点,求两个点之间的距离思路:裸LCA。维护点到根节点的距离,那么u到根节点距离+v到根节点距离-lca(u,v)到根节点距离即可离线LCA的思路很清晰,大概就是利用从下向上的并查集去维护节点。#include #include #include #include #include #include #include #include #include #
qwb492859377
·
2015-10-21 15:00
HDU2586
How far away ?(LCA模板题)
题目链接:传送门题意:给定一棵树,求两个点之间的距离。分析:LCA的模板题目ans=dis[u]+dis[v]-2*dis[lca(u,v)];在线算法:具体讲解传送门代码如下:#include #include #include #include usingnamespacestd; constintmaxn=40010; structnod{ intto,next,w; }edge[max
u013790563
·
2015-06-25 15:00
HDU2586
How far away ?【最近公共祖先】【Tarjan-LCA算法】
Howfaraway?TimeLimit:2000/1000MS(Java/Others) MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):6252 AcceptedSubmission(s):2344ProblemDescriptionTherearenhousesinthevillageandsomebidirectional
u011676797
·
2014-12-31 21:00
lca倍增算法
HDU2586
要注意只有简单边相连的图是一棵树,树有n-1条边倍增之前要先存双向边,以任意顶点为根(比如1)dfs遍历确定树。
zz_ylolita
·
2014-08-17 23:00
HDU2586
How far away ?
ProblemDescriptionTherearenhousesinthevillageandsomebidirectionalroadsconnectingthem.Everydaypeolealwaysliketoasklikethis"HowfarisitifIwanttogofromhouseAtohouseB"?Usuallyithardtoanswer.Butluckilyintth
starcuan
·
2014-02-11 17:00
HDU
HDU2586
(最近公共祖先的Tarjan算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给一棵树,询问u和v之间的边权和。#pragmacomment(linker,"/STACK:1024000000,1024000000")#include#include#include#includeusingnamespacestd;constintN=50005;vectorv[N],
ACdreamers
·
2013-09-24 11:14
图论
HDU2586
(最近公共祖先的Tarjan算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给一棵树,询问u和v之间的边权和。#pragmacomment(linker,"/STACK:1024000000,1024000000") #include #include #include #include usingnamespacestd; constintN=500
ACdreamers
·
2013-09-24 11:00
[置顶] Tarjan离线算法求最近公共祖先(LCA)
Tarjan离线算法求LCA介绍 前言:首先,本人搞懂Tarjan求最近公共祖先(LCA),也是浏览了大量其他网友大牛的文章,若是看了本文仍未弄懂的,可以尝试自己做一下模板题(裸题)
HDU2586
u011400953
·
2013-08-18 21:00
hdu2586
(How far away ?)
Howfaraway? TimeLimit:2000/1000MS(Java/Others) MemoryLimit:32768/32768K(Java/Others)
wangwenhao00
·
2013-04-15 23:00
hdu2586
LCA模板
hdu2586
先预处理然后是 在线询问(也就是一边读入一边查询)#pragmacomment(linker,"/STACK:1024000000,1024000000") #include #include
dellaserss
·
2012-12-06 17:00
hdu2586
How far away? LCA
hdu2586#include #include #include #include usingnamespacestd; #defineMAX40000 structedge{ intv,w; }; vectormp[MAX]; vectorquery[MAX]; boolflag[MAX]; intpre[MAX],father[MAX],path[MAX]; intfind(intx){
dellaserss
·
2012-12-03 11:00
hdu2586
[lca离线tarjon算法][递归与非递归]
hdu2586
[lca]tarjon是离线的算法, 在线的话会有倍增法和rmq,其实这2个方法有一曲同工之妙#include #include #include #include usingnamespacestd
jxy859
·
2012-08-09 11:00
struct
list
query
include
merge
IM
09-09 HDU_Steps5.3 树状数组,LCA HDU1166 HDU2492 HDU3584
HDU2586
HDU2874 HDU3486 HDU2688
5.3.1HDU1166敌兵布阵裸的树状数组query[i..j]=sum(j)-sum(i-1)#include #include usingnamespacestd; constintMAXN=50010; intn,cas,x,y; charop[6]; //树状数组操作 intc[MAXN*2]; voidinit(){memset(c,0,sizeofc);} intlowbit(int
swm8023
·
2011-09-13 13:00
c
算法
struct
query
merge
HDU2586
How far away ?(LCA离线算法)
LCA(最近公共祖先)的离线算法,用到的是tarjan的思想,并用并查集标记父亲节点。说说我的理解:我们从根开始深搜遍历树,每当回溯到一个节点时,那就意味着我们已经完成了该节点子树的遍历,显然这个节点就是子树中点以及其本身的最近公共祖先,以此类推到整个树。这里非常巧妙的一点是,对于一个点,只有完成了其子树的遍历,我们才改变其父节点的值(赋初值为father[i]=i),这样,对于每次询问(就是给出
l04205613
·
2011-08-17 20:00
c
算法
struct
ini
2010
上一页
1
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他