HDU 2586
http://acm.hdu.edu.cn/showproblem.php?pid=2586
题意:求最近祖先节点的权值和
思路:LCA Tarjan算法
#include <stdio.h>
#include <string.h>
#define maxn 40005 int m,n,x[maxn],y[maxn],z[maxn],head[maxn*],pos,dist[maxn],f[maxn];
bool vis[maxn];
struct Edge{
int to,val,next;
}edge[maxn*]; void add(int u,int v,int val)
{
edge[pos].to = v;
edge[pos].val = val;
edge[pos].next = head[u];
head[u] = pos++;
} int Find(int x)
{
if(f[x]!=x)
return f[x] =Find(f[x]);
return f[x];
} void Tarjan(int u)
{
vis[u] = true;
f[u] = u;
for(int i = ;i<=n;i++)
{
if(x[i]==u&&vis[y[i]]) z[i] = Find(y[i]);
if(y[i]==u&&vis[x[i]]) z[i] = Find(x[i]);
}
for(int i =head[u];i!=-;i=edge[i].next)
{
int v = edge[i].to;
if(!vis[v])
{
dist[v] =dist[u]+edge[i].val;
Tarjan(v);
f[v] = u;
}
}
} int main()
{
int t,a,b,c;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
memset(head,-,sizeof(head));
memset(vis,false,sizeof(vis)); pos = ;
for(int i = ;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
z[i] = ;
}
z[m] = ;
for(int i = ; i<=n;i++)
{
scanf("%d%d",&x[i],&y[i]); //分别存每一次的查询点。
}
dist[] = ;
Tarjan();
for(int i = ;i<=n;i++)
printf("%d\n",dist[x[i]]+dist[y[i]]-*dist[z[i]]);
}
return ;
}
HDU 2586的更多相关文章
- HDU - 2586 How far away ?(LCA模板题)
HDU - 2586 How far away ? Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- hdu 2586 How far away ?倍增LCA
hdu 2586 How far away ?倍增LCA 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路: 针对询问次数多的时候,采取倍增 ...
- LCA(最近公共祖先)--tarjan离线算法 hdu 2586
HDU 2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- hdu 2586 How far away
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2586 (LCA模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:在一个无向树上,求一条链权和. 解题思路: 0 | 1 / \ 2 3 ...
- HDU 2586 How far away ? (LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 LCA模版题. RMQ+LCA: #include <iostream> #incl ...
- 【HDU 2586 How far away?】LCA问题 Tarjan算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给出一棵n个节点的无根树,每条边有各自的权值.给出m个查询,对于每条查询返回节点u到v的最 ...
- hdu - 2586 How far away ?(最短路共同祖先问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 最近公共祖先问题~~LAC离散算法 题目大意:一个村子里有n个房子,这n个房子用n-1条路连接起 ...
- HDU 2586 How far away ?(LCA在线算法实现)
http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给出一棵树,求出树上任意两点之间的距离. 思路: 这道题可以利用LCA来做,记录好每个点距离根结点的 ...
随机推荐
- python命名空间
在"python之禅"那几句话中有一句:namespace is a good thing. python对于命名空间的处理非常简单,下面的内容不一定真实,完全是我根据现象推测出来 ...
- Stack的三种含义
作者: 阮一峰 日期: 2013年11月29日 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词 ...
- win7快捷键
<1> Top 17 常规快捷键 在开始使用Win7中神奇的快捷键加速我们的电脑操作之前,先给大家介绍几个从Win2000到现在一直通用的"资源管理器"快捷键,权当作热 ...
- mysql Packet for query is too large (1185 > 1024)异常
注:最近mysql一直提示如下错误 Packet for query is too large (1185 > 1024). You can change this value on the s ...
- Node.js 安装配置
1.安装常用工具: [root@em-nodejs /]# yum -y install vim wget xz 2.下载Node.js二进制安装包: [root@em-nodejs /]# wget ...
- RocketMQ原理解析-Broker
broker 1. broker的启动 brker的启动 Broker向namesrv注册 1. 获取namesrv的地址列表(是乱序的) 2. 遍历向每个namesrv注册topic的配置信息top ...
- 2.5多重else嵌套的二次方程求根
#include<stdio.h> #include<math.h> int main() { double a, b, c, disc, x1, x2, realpart, ...
- Web.xml详解(转)
这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一. Web.xml详解: (一) web.xml加载过程(步骤) 首 ...
- Bubble Cup 8 finals C. Party (575C)
题意: 给定n个人,分两天晚上去夜总会开派对,要求每天恰好有n/2个人去,且每人去的夜总会各不相同. 每个人对不同的晚上不同的夜总会有不同的满意度,求一个方案使得所有人的满意度之和最大. 夜总会数量= ...
- Tensorflow使用环境配置
windows中不能直接使用Tensorflow,所以得费点劲.(2016.11.29更新,TensorFlow 0.12 中已加入初步的 Windows 原生支持) 先是直接使用了<Deep ...