题意:

城市 道路  没有环 不一定连通的树 求两城市的最短距离 设想一下就是很多小树  那好办

思路:

lca离线算法 然后有个技巧就是 每次我们tarjan一棵树不是最后树的节点都访问过并且孩子全能找到老爸嘛 那么我们只要做做做做 做到全部的城市都访问过了  就行了 反正你做这颗小树的时候又不会影响到其他树的

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. int n,m;
  6. const int N = ;
  7. const int M = ;
  8. int f[N],Next[*N],va[*N],wi[*N],Head[N];
  9. int vis[N];
  10. int nex[*M],to[*M],id[M],head[N],ans[M];
  11. int find(int x)
  12. {
  13. if(x!=f[x])f[x]=find(f[x]);
  14. return f[x];
  15. }
  16. int len,dis[N],l;
  17. void add(int u,int v,int w)
  18. {
  19. va[len]=v;
  20. wi[len]=w;
  21. Next[len]=Head[u];
  22. Head[u]=len++;
  23. }
  24. void add_x(int u,int v)
  25. {
  26. to[l]=v;
  27.  
  28. nex[l]=head[u];
  29. head[u]=l++;
  30. }
  31.  
  32. void lca(int u,int fa)
  33. {
  34. f[u]=u;
  35. for(int i=Head[u];i!=-;i=Next[i])
  36. {int v=va[i],w=wi[i];
  37. if(v!=fa){
  38.  
  39. dis[v]=dis[u]+w;
  40. lca(v,u);
  41. f[v]=u;
  42. }
  43. }
  44. vis[u]=;
  45. for(int i=head[u];i!=-;i=nex[i])
  46. {
  47. int v=to[i];
  48. if(vis[v])
  49. {//puts("sadasd");
  50. ans[i/]=find(v);
  51. }
  52. }
  53.  
  54. }
  55.  
  56. int main()
  57. {
  58. int k;
  59. while(~scanf("%d%d%d",&n,&m,&k))
  60. {
  61. len=l=;
  62. memset(Head,-,sizeof Head);
  63. memset(head,-,sizeof head);
  64. for(int i=;i<m;i++)
  65. {
  66.  
  67. int u,v,w;
  68. scanf("%d%d%d",&u,&v,&w);
  69. add(u,v,w);
  70. add(v,u,w);
  71. }
  72. dis[]=;
  73. for(int i=;i<k;i++)
  74. {
  75. int u,v;
  76. scanf("%d%d",&u,&v);
  77. id[i]=u;
  78. add_x(u,v);
  79. add_x(v,u);
  80. }
  81.  
  82. memset(vis,,sizeof vis);
  83. memset(f,,sizeof f);
  84. memset(ans,-,sizeof ans);
  85. for(int i=;i<=n;i++)if(vis[i]==)lca(i,);
  86. for(int i=;i<l;i+=)
  87. {
  88.  
  89. int a,b,c;
  90. a=to[i];
  91. b=id[i/];
  92.  
  93. if(find(a)!=find(b))puts("Not connected");
  94. else {c=ans[i/];
  95.  
  96. printf("%d\n",dis[a]+dis[b]-*dis[c]);}
  97. }
  98. }
  99. }

Hdu 2874 Connections between cities的更多相关文章

  1. hdu 2874 Connections between cities [LCA] (lca->rmq)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  2. HDU 2874 Connections between cities(LCA Tarjan)

    Connections between cities [题目链接]Connections between cities [题目类型]LCA Tarjan &题意: 输入一个森林,总节点不超过N ...

  3. hdu 2874 Connections between cities 带权lca判是否联通

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  4. hdu 2874 Connections between cities(st&rmq LCA)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  5. hdu 2874 Connections between cities (并查集+LCA)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  6. HDU 2874 Connections between cities(LCA)

    题目链接 Connections between cities LCA的模板题啦. #include <bits/stdc++.h> using namespace std; #defin ...

  7. HDU——2874 Connections between cities

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  8. HDU 2874 Connections between cities (LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意是给你n个点,m条边(无向),q个询问.接下来m行,每行两个点一个边权,而且这个图不能有环路 ...

  9. HDU 2874 Connections between cities(LCA离线算法实现)

    http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意: 求两个城市之间的距离. 思路: LCA题,注意原图可能不连通. 如果不了解离线算法的话,可以看我之 ...

  10. HDU 2874 Connections between cities(LCA(离线、在线)求树上距离+森林)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题目大意:给出n个点,m条边,q个询问,每次询问(u,v)的最短距离,若(u,v)不连通即不在同 ...

随机推荐

  1. js 的 提交

    <script type="text/javascript"> function sub(){ if(document.form1.xingming.value==&q ...

  2. [转载]JVM性能调优--JVM参数配置

    http://www.cnblogs.com/chen77716/archive/2010/06/26/2130807.html

  3. zoj 2100 Seeding

    Seeding Time Limit: 2 Seconds      Memory Limit: 65536 KB It is spring time and farmers have to plan ...

  4. 323. Number of Connected Components in an Undirected Graph

    算连接的..那就是union find了 public class Solution { public int countComponents(int n, int[][] edges) { if(e ...

  5. [置顶] AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

    AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRe ...

  6. Android开发学习之Adapter

    Adapter是指适配器的意思,在Android中,适配器扮演者重要的角色,是UI与Data实现绑定的一个桥梁.Adapter负责创建和显示每个项目的子View和提供对下层数据的访问.支持Adapte ...

  7. 【Linux学习】Linux的文件权限(一)

    Linux操作系统是一个非常优秀的操作系统,同一时候也是一个多用户.多任务的操作系统.那么这就意味着会有非常多的人同一时候使用同一个操作系统的情况. 这时.对于一个用户来说,保护好自己的隐私权就成了一 ...

  8. jquery+正則表達式验证邮箱格式的样例

    js: $("#email").blur(function(){ //获取id相应的元素的值,去掉其左右的空格 var email = $.trim($('#email').val ...

  9. java websocket工具

    https://github.com/dzharvis/servlet-websocket-server http://redstarofsleep.iteye.com/blog/1488639 ht ...

  10. Qt 学习之路:元素布局

    上一章我们介绍了 QML 中用于定位的几种元素,被称为定位器.除了定位器,QML 还提供了另外一种用于布局的机制.我们将这种机制成为锚点(anchor).锚点允许我们灵活地设置两个元素的相对位置.它使 ...