hdu 2586 How far away ?(离线求最近公共祖先)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
using namespace std; const int mx=4e4+;
struct N
{
int v,d;
N(int x,int y)
{
v=x;
d=y;
}
};
vector<N>g[mx],q[mx];
int father[mx];
int dis[mx];
bool vs[mx];
int ans[mx]; void Init(int n)
{
for (int i=;i<=n;i++)
{
father[i]=i;
dis[i]=;
vs[i]=false;
g[i].clear();
q[i].clear();
}
} int Find(int x)
{
int w=x;
while (w!=father[w]) w=father[w];
while (x!=father[x])
{
int fa=father[x];
father[x]=w;
x=fa;
}
return w;
} void un(int x,int y)
{
int rx=Find(x);
int ry=Find(y);
father[y]=x;
} void dfs(int u,int fa,int d)
{
dis[u]=d;
vs[u]=true;
for (int i=;i<g[u].size();i++)
{
N k=g[u][i];
if (vs[k.v]) continue;
dfs(k.v,u,d+k.d);
}
for (int i=;i<q[u].size();i++)
{
N k=q[u][i];
if (!vs[k.v]) continue;
ans[k.d]=dis[u]+dis[k.v]-*dis[Find(k.v)];
}
un(fa,u);
} int main()
{
int n,m;
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
Init(n);
for (int i=;i<n;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
g[u].push_back(N(v,w));
g[v].push_back(N(u,w));
}
for (int i=;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
q[u].push_back(N(v,i));
q[v].push_back(N(u,i));
}
dfs(,,);
for (int i=;i<=m;i++) printf("%d\n",ans[i]);
}
}
hdu 2586 How far away ?(离线求最近公共祖先)的更多相关文章
- 【LCA求最近公共祖先+vector构图】Distance Queries
Distance Queries 时间限制: 1 Sec 内存限制: 128 MB 题目描述 约翰的奶牛们拒绝跑他的马拉松,因为她们悠闲的生活不能承受他选择的长长的赛道.因此他决心找一条更合理的赛道 ...
- POJ 1986 Distance Queries (Tarjan算法求最近公共祖先)
题目链接 Description Farmer John's cows refused to run in his marathon since he chose a path much too lo ...
- 求最近公共祖先(LCA)的各种算法
水一发题解. 我只是想存一下树剖LCA的代码...... 以洛谷上的这个模板为例:P3379 [模板]最近公共祖先(LCA) 1.朴素LCA 就像做模拟题一样,先dfs找到基本信息:每个节点的父亲.深 ...
- tarjan算法求最近公共祖先
tarjian算法 LCA: LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点.也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们 ...
- 用“倍增法”求最近公共祖先(LCA)
1.最近公共祖先:对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.的祖先且x的深度尽可能大. 2.朴素算法:记录下每个节点的父亲,使节点u,v一步一步地向上找 ...
- LCA 在线倍增法 求最近公共祖先
第一步:建树 这个就不说了 第二部:分为两步 分别是深度预处理和祖先DP预处理 DP预处理: int i,j; ;(<<j)<n;j++) ;i<n;++i) ) fa[i ...
- hdu 2586 欧拉序+rmq 求lca
题意:求树上任意两点的距离 先说下欧拉序 对这颗树来说 欧拉序为 ABDBEGBACFHFCA 那欧拉序有啥用 这里先说第一个作用 求lca 对于一个欧拉序列,我们要求的两个点在欧拉序中的第一个位置之 ...
- hdu 2586 How far away ? ( 离线 LCA , tarjan )
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现
首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点. 换句话说,就是两个点在这棵 ...
随机推荐
- hbase 协处理器
一.服务端1.安装Protobuf2.RPC proto 定义文件:Examples.protooption java_package = "org.apache.hadoop.hbase. ...
- listview 的适配器 getview 随着软件健盘显示和隐藏,出现多个空的position问题
AndroidManifest 里配置 android:windowSoftInputMode="stateHidden|adjustPan" listview的宽高设置成fill ...
- WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default i
jdbc连接数据库候,对数据进行访问,访问正常当出现如下警告: WARN: Establishing SSL connection without server's identity verifica ...
- Visual C++2012中CMFCPropertySheet的用法
看到了一个例子(NewControls),该例子中使用了按钮图片等特效(哈哈,个人觉得挺高端),但是仔细看它的工程,没有xxxDlg.cpp就觉得奇诡了,难道不是基于对话框完成的?最终查阅居然是这样的 ...
- 关于Hibernate XXX is not mapped 错误
我的实体类是这么配置的 @Entity(name="EntityName") //必须,name为可选,对应数据库中一的个表 就会出现 XXX is not mapped. ...
- 【Python】pip国内安装源
豆瓣安装源 pip install packages -i http://pypi.doubanio.com/simple --upgrade --trusted-host pypi.doubanio ...
- 更换win7锁屏壁纸
1.打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Backgroun ...
- Vue2父子组件通信探究
父组件: <template> <div id="secondcomponent"> <input type="" v-model ...
- NHibernate系列文章二十三:NHibernate查询之Criteria查询(附程序下载)
摘要 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题.如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串.这篇文章介绍NHibernate面 ...
- Ixia测试仪的自动化
Ixia,美国Ixia公司的通信网络测试仪. 1.Ixia的自动化测试场景 测试PC(安装IxOS)AT框架-->Tcl驱动库SIG_Teq_Ixia.tcl(加载 IxTclHal库)---- ...