How far away ?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3423    Accepted Submission(s): 1274

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 ECJTU 2009 Spring Contest

Recommend lcy

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<vector>
  4. #define GS 40025
  5. using namespace std;
  6. vector<int> G[GS],E[GS];
  7. int father[GS],Len[GS],Dep[GS];
  8. int N;
  9. void build(int R)
  10. {
  11. for (int i=;i<G[R].size();i++)
  12. {
  13. int v=G[R][i];
  14. if (v==father[R]) continue;
  15. father[v]=R;
  16. build(v);
  17. }
  18. }
  19. void dfs(int R)
  20. {
  21. for (int i=;i<G[R].size();i++)
  22. {
  23. int v=G[R][i];
  24. if (v==father[R]) continue;
  25. Dep[v]=Dep[R]+;
  26. Len[v]=Len[R]+E[R][i];
  27. dfs(v);
  28. }
  29. }
  30. int LCA(int a,int b)
  31. {
  32. if (a==b) return a;
  33. if (father[a]==b) return b;
  34. else if (father[b]==a) return a;
  35. if (Dep[a]<Dep[b]) return LCA(a,father[b]);
  36. else return LCA(father[a],b);
  37. }
  38. int main()
  39. {
  40. int T,M;
  41. scanf("%d",&T);
  42. while (T--)
  43. {
  44. scanf("%d%d",&N,&M);
  45. for (int i=;i<=N;i++) G[i].clear();
  46. for (int i=;i<=N;i++) E[i].clear();
  47. for (int i=;i<N;i++)
  48. {
  49. int x,y,c;
  50. scanf("%d%d%d",&x,&y,&c);
  51. G[x].push_back(y);
  52. G[y].push_back(x);
  53. E[x].push_back(c);
  54. E[y].push_back(c);
  55. }
  56. memset(father,-,sizeof(father));
  57. build();
  58. Dep[]=;
  59. Len[]=;
  60. dfs();
  61. while (M--)
  62. {
  63. int x,y;
  64. scanf("%d%d",&x,&y);
  65. int F=LCA(x,y);
  66. printf("%d\n",Len[x]+Len[y]-*Len[F]);
  67. }
  68. }
  69. return ;
  70. }

How far away[HDU2586]的更多相关文章

  1. LCA在线算法(hdu2586)

    hdu2586 How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  2. poj1330+hdu2586 LCA离线算法

    整整花了一天学习了LCA,tarjan的离线算法,就切了2个题. 第一题,给一棵树,一次查询,求LCA.2DFS+并查集,利用深度优先的特点,回溯的时候U和U的子孙的LCA是U,U和U的兄弟结点的子孙 ...

  3. LCA 离线的Tarjan算法 poj1330 hdu2586

    LCA问题有好几种做法,用到(tarjan)图拉算法的就有3种.具体可以看邝斌的博客.http://www.cnblogs.com/kuangbin/category/415390.html 几天的学 ...

  4. hdu2586 LCA

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. HDU2586 How far away ?(LCA模板题)

    题目链接:传送门 题意: 给定一棵树,求两个点之间的距离. 分析: LCA 的模板题目 ans = dis[u]+dis[v] - 2*dis[lca(u,v)]; 在线算法:详细解说 传送门 代码例 ...

  6. HDU2586

    最近的共同祖先反复问的问题. #include <iostream> #include <algorithm> #include <vector> #include ...

  7. HDU2586 How far away ? 邻接表+DFS

    题目大意:n个房子,m次询问.接下来给出n-1行数据,每行数据有u,v,w三个数,代表u到v的距离为w(双向),值得注意的是所修建的道路不会经过一座房子超过一次.m次询问,每次询问给出u,v求u,v之 ...

  8. hdu2586 lca倍增法

    倍增法加了边的权值,bfs的时候顺便把每个点深度求出来即可 #include<iostream> #include<cstring> #include<cstdio> ...

  9. 模板倍增LCA 求树上两点距离 hdu2586

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 课上给的ppt里的模板是错的,wa了一下午orz.最近总是被坑啊... 题解:树上两点距离转化为到根的距离 ...

随机推荐

  1. 新一代 Tor发布,它牛在哪里?

    导读 知名匿名搜索引擎Tor,最近发布了基于火狐浏览器45-ESR的6.0版本,增强了对HTML5的支持,并更新了用来保护加密流量及其更新机制的安全功能.火狐45-ESR版本的全称为Firefox E ...

  2. Linux系统管理员面试50题

    命令nslookup是做什么的? Nslookup 是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具. 你如何把CPU占用率最高的进程显示出来? top -c 按照cpu排序 如果 ...

  3. Objective-C中的instancetype和id区别

    目录(?)[-] 有一个相同两个不同相同 Written by Mattt Thompson on Dec 10th 2012 一什么是instancetype 二关联返回类型related resu ...

  4. Apache配置文件中的deny和allow的使用

    Apache配置文件中的deny和allow的使用 由于产品的需要,最近在配置apache的负载均衡功能,但是在配置虚拟主机的访问权限的时候我们遇到了一些问题.主要问题是deny和allow的执行顺序 ...

  5. 【转】如何修改Chrome缓存目录的地址

    本文转自:http://www.nowamagic.net/librarys/veda/detail/2573 C盘空间越来越小,在Win7里还标红了,心里看得不舒服,得想一些方法腾出一些空间.看了A ...

  6. iOS 中使用Block时需要注意的retain circle

    现在在ios中,block是越来越多了.自己在类中定义block对象时,需要注意block对象的使用方法,防止产生retain circle,导致内存泄露. 现在分析一下产生retain circle ...

  7. centos下编译安装mysql5.5/5.6

    2013年11月16日 19:39:13 centos 6 mysql 5.5.28 我只说些我出错的地方: cmake后删除的方法是 xargs rm < install_manifest.t ...

  8. PHP--TP框架----生成验证码的方式

    TP框架----生成验证码的方式 xianshi.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  9. Controller与View之间的数据传递

    1)Controller向View传递数据ViewData["message"] = "Hello";//使用ViewData传递数据ViewBag.Time ...

  10. SpringMVC详细示例实战

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...