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 仓储,你的归宿究竟在哪?"这个系列,本来是想写个上下篇,但是现在觉得,很有多东西需要明确,我也不知道接下来会写多少篇,所以上一篇的标题就改成了 ...
随机推荐
- express中遇到的一个小问题“403”
这样子的一个express简单项目文件执行会出现403 Forbidden的错误: var express = require('express'); var app = express(); app ...
- 发布一个PHP包到Packagist, 然后使用Composer安装
Composer 能够方便的进行项目的依赖管理, 当我们发布一个包并且希望别人通过Composer安装的时候, 就需要将包发布到Composer的包仓库Packagist上面. 下面进行详细的说明一 ...
- 从Wos文本数据中获取摘要进行分析的一种方法
namespace 清理数据 { class Program { static void Main(string[] args) { string strDirName = "File&qu ...
- python数据类型(字符串、列表操作)
一.整形和浮点型整形也就是整数类型(int)的,在python3中都是int类型,没有什么long类型的,比如说存年龄.工资.成绩等等这样的数据就可以用int类型,有正整数.负整数和0,浮点型的也就是 ...
- Day71Django基础
Django框架基础一 python中的web框架 a:socket b:路由跟视图函数匹配关系 c:模板渲染 django: a: 用了别人的wsgiref b:自己写 ...
- Monkey脚本API
Monkey脚本API简介 LaunchActivity(pkg_name, cl_name):启动应用的Activity.参数:包名和启动的Activity. Tap(x, y, tapDurati ...
- 用 Python 获取 B 站播放历史记录
用 Python 获取 B 站播放历史记录 最近 B 站出了一个年度报告,统计用户一年当中在 B 站上观看视频的总时长和总个数.过去一年我居然在 B 站上看了2600+个视频,总计251个小时,居然花 ...
- layer.open参数;layer.open关闭事件;layer.open关闭刷新;layer.open获取子页的值;layer.open调用子页面的方法
父页面 function layerOpen() { layer.open({ type: 2, shade: [0], title: "验收申请", area: ['1024px ...
- 如何解决vux不兼容安卓低版本问题
最近做移动端H5页面用VUX来写UI组件这块.ios测试的时候没啥大问题,不过在4.4版本的华为手机上测试就崩了.接下来详细记述下崩的几个点. 第一:vux自带的提示框,在低版本安卓系统上全不是居中显 ...
- jinja2 把文本变成html
data 是传过去的值 过滤器 | {{data.name | safe}}