HDU-2586 How far away?
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.InputFirst 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.OutputFor each test case,output m lines. Each line represents the answer of the query. Output a bland line after each test case.Sample Input2
3 2
1 2 10
3 1 15
1 2
2 3 2 2
1 2 100
1 2
2 1Sample Output
10
25
100
100
1 #include<iostream>
2 #include<stdio.h>
3 #include<vector>
4 #include<algorithm>
5 #include<string.h>
6 using namespace std;
7 int ans[250],vis[40500];
8 vector< pair <int ,int > > vec[40500];
9 vector <pair <int ,int > > query[40500];
10 struct Node{
11 int f;
12 int len;
13 } pre[40500];
14 Node Find(int x)
15 {
16 if(pre[x].f==x)
17 {
18 return pre[x];
19 }
20 else
21 {
22 Node now;
23 now=Find(pre[x].f);
24 pre[x].len+=now.len;
25 pre[x].f=now.f;
26 return pre[x];
27 }
28 }
29 int dfs(int u,int fa,int length)
30 {
31 pre[u].f=u;
32 pre[u].len=0;
33 vis[u]=1;
34 for(int i=0;i<vec[u].size();i++)
35 {
36 int v=vec[u][i].first;
37 int len=vec[u][i].second;
38 if(v==fa) continue;
39 dfs(v,u,len);
40 }
41 for(int i=0;i<query[u].size();i++)
42 {
43 int v=query[u][i].first;
44 int id=query[u][i].second;
45 if(vis[v]==1)
46 {
47 ans[id]=Find(v).len+Find(u).len;
48 }
49 }
50 pre[u].f=fa;
51 pre[u].len+=length;
52 }
53 int main()
54 {
55 int T;
56 cin>>T;
57 while(T--)
58 {
59 int n,q,x,y,k;
60 cin>>n>>q;
61 for(int i=0;i<n-1;i++)
62 {
63 cin>>x>>y>>k;
64 vec[x].push_back({y,k});
65 vec[y].push_back({x,k});
66 vis[y]=1;
67 }
68 for(int i=0;i<q;i++)
69 {
70 cin>>x>>y;
71 query[x].push_back({y,i});
72 query[y].push_back({x,i});
73 }
74 for(int i=1;i<=n;i++)
75 {
76 if(vis[i]==0)
77 {
78 dfs(i,i,0);
79 break;
80 }
81 }
82 for(int i=0;i<q;i++)
83 cout<<ans[i]<<endl;
84 for(int i=0;i<=n;i++)
85 {
86 vec[i].clear();
87 query[i].clear();
88 }
89 memset(pre,0,sizeof(pre));
90 memset(vis,0,sizeof(vis));
91 }
92 return 0;
93 }
HDU-2586 How far away?的更多相关文章
- 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 思路: 针对询问次数多的时候,采取倍增 ...
- HDU 2586 How far away ?【LCA】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Time Limit: 2000/1000 MS (Java/Oth ...
- HDU 2586.How far away ?-离线LCA(Tarjan)
2586.How far away ? 这个题以前写过在线LCA(ST)的,HDU2586.How far away ?-在线LCA(ST) 现在贴一个离线Tarjan版的 代码: //A-HDU25 ...
- 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 ?(最短路共同祖先问题)
题目链接: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来做,记录好每个点距离根结点的 ...
- HDU 2586 How far away ?(LCA模板 近期公共祖先啊)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 Problem Description There are n houses in the vi ...
- HDU 2586 How far away ?【LCA模板题】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给你N个点,M次询问.1~N-1行输入点与点之间的权值,之后M行输入两个点(a,b)之间的最 ...
- hdu 2586 How far away ?(LCA - Tarjan算法 离线 模板题)
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- Ceph-部署
Ceph规划 主机名 IP地址 角色 配置 ceph_controler 192.168.87.202 控制节点.MGR Centos7系统500G硬盘 ceph_node1 192.168.87.2 ...
- Python操作Redis大全
一.字符串 string Python操作Redis的redis模块对字符串(string)的主要操作函数包括:SET.GET.GETSET.SETEX.SETNX.MSET.MSETNX.INCR( ...
- 原来你是这样的SpringBoot--Async异步任务
本节我们一起学习一下SpringBoot中的异步调用,主要用于优化耗时较长的操作,提高系统性能和吞吐量. 一.新建项目,启动异步调用 首先给启动类增加注解@EnableAsync,支持异步调用 @En ...
- 别再用 float 布局了,flex 才是未来!
大家好,我是树哥! 前面一篇文章整体介绍了 CSS 的布局知识,其中说到 float 布局是 CSS 不断完善的副产物.而在 2023 年的今天,flex 这种布局方式才是未来!那么今天我们就来学习下 ...
- 谱图论:Laplacian二次型和Markov转移算子
以下部分是我学习CMU 15-751: TCS Toolkit的课堂笔记.由于只是个人笔记,因此许多地方在推导上可能不那么严谨,还望理论大佬多多包涵. 1 问题定义 1.1 无向图\(G\) 在本文中 ...
- Go 语言开发环境搭建
Go 语言开发环境搭建 目录 Go 语言开发环境搭建 一. GO 环境安装 1.1 下载 1.2 Go 版本的选择 1.3 安装 1.3.1 Windows安装 1.3.2 Linux下安装 1.3. ...
- 快速添加string value Refactor->android->Extract Android String 或按Ctrl+1 出现列表框选择Extract Android String 来进行String国际化
快速添加string value Refactor->android->Extract Android String或按Ctrl+1 出现列表框选择Extract Android Stri ...
- 33家国内外知名的手机广告平台的SDK名单汇总,吐血推荐
下面格式:第一行是广告平台名称,第二行是SDK的包名特征,第三行是平台网站 多盟cn.domob.androidhttp://www.domob.cn/百度推广SDK com.baidu统计SDK c ...
- np.random.uniform()
np.random.uniform(start,end,second) start:开始数 end:结束数 second:次数,也就是选择几次. 代码结果如下所示: import numpy as n ...
- Mach-O Inside: 命令行工具集 otool objdump od 与 dwarfdump
1 otool otool 命令行工具用来查看 Mach-O 文件的结构. 1.1 查看文件头 otool -h -v 文件路径 -h选项表明查看 Mach-O 文件头. -v 选项表明将展示的内容进 ...