[HDU]P2586 How far away?[LCA]
How far away ?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18675 Accepted Submission(s): 7274
Problem Description
There are n houses in the village and some
bidirectional roads connecting them. Every day peole always like to ask like
this "How far is it if I want to go from house A to house B"? Usually
it hard to answer. But luckily int this village the answer is always unique,
since the roads are built in the way that there is a unique simple
path("simple" means you can't visit a place twice) between every two
houses. Yout task is to answer all these curious people.
Input
First line is a single integer T(T<=10),
indicating the number of test cases.
For each test case,in the first line there are two numbers
n(2<=n<=40000) and m (1<=m<=200),the number of houses and the
number of queries. The following n-1 lines each consisting three numbers i,j,k,
separated bu a single space, meaning that there is a road connecting house i
and house j,with length k(0<k<=40000).The houses are labeled from 1 to n.
Next m lines each has distinct integers i and j, you areato answer
the distance between house i and house j.
Output
For each test case,output m lines. Each
line represents the answer of the query. Output a bland line after each test
case.
Sample Input
2
3 2
1 2 10
3 1 15
1 2
2 3
2 2
1 2 100
1 2
2 1
Sample Output
10
25
100
100
Source
Recommend
lcy | We
have carefully selected several similar problems for you: 3486 2874 2888 3234 2818
这道题就是很裸的LCA,主要是练一下倍增,今天考试一道有关LCA的,我用树剖打竟然T了?(感觉效率有保证,不知道是不是数据问题)
可恶啊,打了很久诶,于是就来学习一下倍增。
代码:
//2017.11.7 //lca #include<iostream> #include<cstdio> #include<cstring> using namespace std; inline int read(); namespace lys{ ; struct edge{ int to; int next; int w; }e[N*]; ],dis[N][],dep[N],pre[N]; int n,m,cnt; void swap(int &a,int &b){int t=a;a=b;b=t;} void add(int x,int y,int w){ e[++cnt].to=y;e[cnt].next=pre[x];pre[x]=cnt;e[cnt].w=w; e[++cnt].to=x;e[cnt].next=pre[y];pre[y]=cnt;e[cnt].w=w; } void dfs(int node,int deep){ dep[node]=deep; int i,v; ;i<=;i++) anc[node][i]=anc[anc[node][i-]][i-],dis[node][i]=dis[node][i-]+dis[anc[node][i-]][i-]; for(i=pre[node];i;i=e[i].next){ v=e[i].to; ]) continue ; anc[v][]=node; dis[v][]=e[i].w; dfs(v,deep+); } } int lca(int x,int y){ ,i; if(dep[x]<dep[y]) swap(x,y); ;i>=;i--) if(dep[y]<=dep[anc[x][i]]) res+=dis[x][i],x=anc[x][i]; if(x==y) return res; ;i>=;i--) if(anc[x][i]!=anc[y][i]) res+=dis[x][i]+dis[y][i],x=anc[x][i],y=anc[y][i]; ]+dis[y][]; } int main(){ memset(pre,,sizeof pre); int i,u,v,w; n=read(); m=read(); cnt=; ;i<n;i++){ u=read(); v=read(); w=read(); add(u,v,w); } dfs(,); while(m--){ u=read(); v=read(); printf("%d\n",lca(u,v)); } ; } } int main(){ int T=read(); while(T--) lys::main(); ; } inline int read(){ ,ff=; char c=getchar(); '){ ; c=getchar(); } +c-',c=getchar(); return kk*ff; }
[HDU]P2586 How far away?[LCA]的更多相关文章
- hdu 5274 Dylans loves tree(LCA + 线段树)
Dylans loves tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- hdu 6203 ping ping ping(LCA+树状数组)
hdu 6203 ping ping ping(LCA+树状数组) 题意:给一棵树,有m条路径,问至少删除多少个点使得这些路径都不连通 \(1 <= n <= 1e4\) \(1 < ...
- HDU 3078:Network(LCA之tarjan)
http://acm.hdu.edu.cn/showproblem.php?pid=3078 题意:给出n个点n-1条边m个询问,每个点有个权值,询问中有k,u,v,当k = 0的情况是将u的权值修改 ...
- HDU 2874 Connections between cities (LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意是给你n个点,m条边(无向),q个询问.接下来m行,每行两个点一个边权,而且这个图不能有环路 ...
- 【HDU 4547 CD操作】LCA问题 Tarjan算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4547 题意:模拟DOS下的cd命令,给出n个节点的目录树以及m次查询,每个查询包含一个当前目录cur和 ...
- HDU 5452 Minimum Cut(LCA)
http://acm.hdu.edu.cn/showproblem.php?pid=5452 题意: 有一个连通的图G,先给出图中的一棵生成树,然后接着给出图中剩余的边,现在要删除最少的边使得G不连通 ...
- HDU 2460 Network(桥+LCA)
http://acm.hdu.edu.cn/showproblem.php?pid=2460 题意:给出图,求每次增加一条边后图中桥的数量. 思路: 先用tarjan算法找出图中所有的桥,如果lowv ...
- HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点 ...
- hdu 2586(最近公共祖先LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路:在求解最近公共祖先的问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好 ...
随机推荐
- 20191127 Spring Boot官方文档学习(4.12)
4.12.缓存(Caching) Spring框架提供了对应用程序透明添加缓存的支持.从本质上讲,抽象将缓存应用于方法,从而根据缓存中可用的信息减少执行次数.缓存逻辑是透明应用的,不会对调用者造成任何 ...
- spring -boot定时任务 quartz 基于 MethodInvokingJobDetailFactoryBean 实现
spring 定时任务 quartz 基于 MethodInvokingJobDetailFactoryBean 实现 依赖包 如下 <dependencies> <depende ...
- 红帽学习笔记[RHCSA] 第三课[输出重定向、Vi编辑器]
第三课 关于Linux的输入输出 输入输出 0 stdin 标准输入 仅读取 1 stdout 标准输出 仅写入 2 stderr 标准错误 仅写入 3 filename 其他文件 读取和/或写入 输 ...
- merge into 导致序列跳号
For each row merged by a MERGE statement. The reference to NEXTVAL can appear in the merge_insert_cl ...
- java学习day1
一.常用的DOS命令 1.打开cmd 窗口键+r --> 输入cmd --> 确认 2.常用的dos命令 dir:列出当前目录下的所有文件及文件夹 md:创建一个新的目录 rd:删除目录 ...
- gcc编译工具生成动态库和静态库
一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...
- PHP 经典有趣的算法
原文:https://blog.csdn.net/a519395243/article/details/77942913 1.一群猴子排成一圈,按1,2,…,n依次编号.然后从第1只开始数,数到第m只 ...
- package.json的所有配置项及其用法,你都熟悉么
写在前面 在前端开发中,npm已经是必不可少的工具了.使用npm,不可避免的就要和package.json打交道.平时package.json用得挺多,但是没有认真看过官方文档.本文结合npm官方文档 ...
- Client does not support authentication protocol requested by server; consider upgrading MySQL client
出现错误 Client does not support authentication protocol requested by server; consider upgrading MySQL c ...
- 自我笔记,Rides介绍
Redis是一个key-value存储系统,和Memccached类似,支持存储的value类型相对更多,很大程度上补偿memcached这类key-value存储的不足 他提供了Java,c/c++ ...