hdu2586How far away ?-(LCA)
http://acm.hdu.edu.cn/showproblem.php?pid=2586
题意:有n个点,有n-1条线连通,求两点间的最短距离,最近公共祖先的入门题。Tarjan离线算法。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int t;
int n,m;
int x,y,z;
bool vis[];///深搜过程判断是否被搜过
int par[];///存储节点的父亲
int dis[];///任意一点到搜索起始点的距离
int ans[]; struct node1
{
int to;
int val;
};
vector<node1>edge[];///邻接表存储边 struct node2
{
int to;
int idx;///第几个查询
};
vector<node2>que[];///邻接表存储查询 void init()
{
memset(dis,,sizeof(dis));
memset(vis,false,sizeof(vis));
for(int i=;i<=n;i++)
{
edge[i].clear();
que[i].clear();
par[i]=i;
}
} int find(int x)///并查集找爹
{
if(par[x]==x)
return x;
else
return par[x]=find(par[x]);
} void unit(int x,int y)///认x做父亲
{
x=find(x);
y=find(y);
if(x!=y)
par[y]=x;
} void dfs(int now,int w)///now是当前点,w是到起始点的距离
{
vis[now]=true;
dis[now]=w;
int len1=edge[now].size();
for(int i=;i<len1;i++)
{
int temp=edge[now][i].to;///临时存储邻接点,简洁表示
if( !vis[ temp ] )
{
dfs( temp,w+edge[now][i].val );
unit(now,temp);///搜完才更新父节点
}
} int len2=que[now].size();
for(int i=;i<len2;i++)///看一下有没有 与 当前点 有询问关系的点
{
int temp=que[now][i].to;
if( vis[ temp ] )
{
ans[ que[now][i].idx ] = dis[now]+dis[temp]-*dis[ find(temp) ];
///两点的最短距离 = 两点到起点的距离之和 - 两倍公共祖先到起点的距离
}
}
} int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
init();
for(int i=;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
edge[x].push_back( {y,z} );
edge[y].push_back( {x,z} );
}
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
que[x].push_back( {y,i} );
que[y].push_back( {x,i} );
}
dfs(,);///以1为起始点深搜
for(int i=;i<=m;i++)
printf("%d\n",ans[i]);
}
return ;
}
hdu2586How far away ?-(LCA)的更多相关文章
- HDU2586---How far away ?(lca算法)
Problem Description There are n houses in the village and some bidirectional roads connecting them. ...
- How far away ?(LCA)dfs和倍增模版
How far away ? Tarjan http://www.cnblogs.com/caiyishuai/p/8572859.html Time Limit: 2000/1000 MS (Jav ...
- HDU - 2586 How far away ?(LCA模板题)
HDU - 2586 How far away ? Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- 「LuoguP3379」 【模板】最近公共祖先(LCA)
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- 最近公共祖先(LCA)---tarjan算法
LCA(最近公共祖先).....可惜我只会用tarjan去做 真心感觉tarjan算法要比倍增算法要好理解的多,可能是我脑子笨吧略略略 最近公共祖先概念:在一棵无环的树上寻找两个点在这棵树上深度最大的 ...
- 最近公共祖先(LCA)学习笔记 | P3379 【模板】最近公共祖先(LCA)题解
研究了LCA,写篇笔记记录一下. 讲解使用例题 P3379 [模板]最近公共祖先(LCA). 什么是LCA 最近公共祖先简称 LCA(Lowest Common Ancestor).两个节点的最近公共 ...
- Repository 仓储,你的归宿究竟在哪?(三)-SELECT 某某某。。。
写在前面 首先,本篇博文主要包含两个主题: 领域服务中使用仓储 SELECT 某某某(有点晕?请看下面.) 上一篇:Repository 仓储,你的归宿究竟在哪?(二)-这样的应用层代码,你能接受吗? ...
- 【转载】在 2016 年做 PHP 开发是一种什么样的体验?(一)
转自:https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听说 ...
- Repository 仓储,你的归宿究竟在哪?(二)-这样的应用层代码,你能接受吗?
写在前面 关于"Repository 仓储,你的归宿究竟在哪?"这个系列,本来是想写个上下篇,但是现在觉得,很有多东西需要明确,我也不知道接下来会写多少篇,所以上一篇的标题就改成了 ...
随机推荐
- jquery 获取name一样的值
$("input[name=test]").map(function(){return this.value;}).get().join(",")
- python之format函数
自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和 ...
- Linux基础入门-文件系统操作与磁盘管理
一.简单文件系统操作: df (-h) 查看磁盘容量: rootfs作为系统启动时内核载入内存之后,在挂载真正的磁盘之前的一个临时文件系统: /dev/sda2 对应主机硬盘的分区,后面的a表示第几块 ...
- 借助微软提供的url重写类库URLRewriter.dll(1.0)实现程序自动二级域名,域名需要泛解析
二级域名和系统中会员帐号自动关联,也就是系统中注册一个会员,会员自动就可以通过二级域名来访问,比如我的帐号是zhangsan,我在morecoder.com注册后,访问zhangsan.morecod ...
- listener.starting()源码探究
容器启动时,监听器调用starting方法,本质是找到匹配的监听器,广播事件,开始监听 上节对寻找匹配监听器做了分析,其是这个过程比较重要的部分,本文开始监听,反而不是那么复杂,如下: 找匹配监听器就 ...
- mongodb shell 运行js脚本的四种方式
1. 交互式 mongo shell 大部分的 mongodb 教程,在第一章都会讲解这种方式. mongo 127.0.0.1:27017 use test db.users.findOne() ...
- php正则讲解 及与 js的正则比较
正则:用于检索字符串的规则: js正则: var reg=/规则/ reg是一个对象,在浏览器下: 所以研究他的属性和方法 属性: global是修饰符,代表全局检索 g ignorecase 忽略大 ...
- 随机模块_random
random.seed(a) 设置种子, 若不穿参数, 就使用系统时间种子相同, 每次生成的随机序列也相同计算机生成的随机数都是伪随机数, 通过算法的出 li = [] # 设置种子 random.s ...
- Java 环境配置 与 碰到的问题
小白记录,希望各位指点,长期整理修改 不定期更新,碰到的与之相关的会添加,做个小笔记,再次碰到可以更好的解决. JDK 下载:Oracle 配置方法:菜鸟教程 - Java 开发环境配置 作用 JAV ...
- robotframework在3.7下的搭建
网上看了大多安装RIDE都是在python2的环境下,今天试了下python3的安装,成功了,步骤如下: 1.首先是python3的安装,以及pip这些工具,具体的网上一堆,不再啰嗦 2.安装robo ...