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来做,记录好每个点距离根结点的 ...
随机推荐
- 两种适用于中小量数据的mysql数据备份
近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...
- ubuntu中phpmyadmin密码忘记
在安装mysql时,默认只让你设置了root的密码,如果root的密码忘记,处理办法如下 第一步: 这时你需要进入/etc/mysql目录下,然后sudo vim/vi debian.cnf查看里面的 ...
- asp.net mvc 权限过滤和单点登录(禁止重复登录)
1.权限控制使用controller和 action来实现,权限方式有很多种,最近开发项目使用控制控制器方式实现代码如下 /// <summary> /// 用户权限控制 /// < ...
- 附加属性出现Failed to assign to property的问题
找了半天资料,最后发现把保护附加属性的类加上public就行了
- 火车头采集ecshop 文章接口文件
<?php header("Content-Type:text/html;charset=utf-8"); $host = $_SERVER['HTTP_HOST']; // ...
- ThinkPhp 3.2 ajax无刷新分页(未完全改完,临时凑合着用)
临时更改后的page类(很多地方没修改...因为笔者PHP没学好..)如下: <?phpnamespace Fenye\libs; /** file: page.class.php 完美分 ...
- CCS应用中常见的一些小技巧
在单片机开发中,通常需要精确估算代码运行时间,用于对算法优化以及对项目平台选择提供参考,通常算法如果用汇编编写,可以人工计算出运行时间,用C语言编写也可以通过反汇编代码而计算到较为精确的运行时间,但当 ...
- mysql 关系表 分组读取的方法
关系表 是一个一对多的表 我们用的时候往往希望得到 array( a=>array(1,2,3,4....), b=>array(3,4,5,6,7...) ) 这样的数组 所以我们可以使 ...
- tomcat集群学习记录1--初识apache http server
起因 平时开发的时候我都是用eclipse把代码部署到本地tomcat的,当然只会去跑1台tomcat啦... 偶尔有时候解决问题需要去公司测试环境找日志.连上公司测试环境以后发现竟然有2台weblo ...
- C# 全角和半角转换以及判断的简单代码
在C#中判断和转换全角半角的方法 1. 判断是否为全角半角 全角占用二个字节 半角占用一个字节 用string.length 和System.text.Encoding.Default.GetByte ...