http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3320

离线算法RE了..

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<string.h>
  4. #include<math.h>
  5. #include<algorithm>
  6. using namespace std;
  7. const int N = ;
  8. const int M =;
  9. struct Edge{
  10. int u,v,w,next;
  11. }e[*N];
  12. struct Q_Edge{
  13. int u,v,next,lca;
  14. }eq[*M];
  15. int head[N];
  16. int _head[N];
  17. int dis[N];
  18. int vis[N];
  19. int ances[N];
  20. int father[N];
  21. void addedge(int u,int v,int w,int &k){
  22. e[k].u = u;e[k].v = v;e[k].w= w;
  23. e[k].next = head[u];head[u]=k++;
  24. }
  25. void add_qedge(int u,int v,int &k){
  26. eq[k].u = u;eq[k].v = v;eq[k].lca = -;
  27. eq[k].next = _head[u];_head[u]=k++;
  28. }
  29. int _find(int u){
  30. if(u==father[u]) return father[u];
  31. return father[u] = _find(father[u]);
  32. }
  33. void unions(int u,int v){
  34. int x = _find(u),y = _find(v);
  35. father[x]=y;
  36. }
  37. void Targin(int u){
  38. vis[u] = true;
  39. ances[u]=father[u] = u;
  40. for(int k = head[u];k!=-;k=e[k].next){
  41. if(!vis[e[k].v]){
  42. int v = e[k].v,w = e[k].w;
  43. dis[v] = dis[u]+w;
  44. Targin(v);
  45. unions(v,u);
  46. ances[_find(u)] = u;
  47. }
  48. }
  49. for(int k = _head[u];k!=-;k=eq[k].next){
  50. if(vis[eq[k].v]){
  51. int v = eq[k].v;
  52. eq[k].lca = eq[k^].lca = ances[_find(v)];
  53. }
  54. }
  55. }
  56. int main()
  57. {
  58. int n;
  59. while(scanf("%d",&n)!=EOF){
  60.  
  61. memset(head,-,sizeof(head));
  62. memset(_head,-,sizeof(_head));
  63.  
  64. int tot=;
  65. for(int i=;i<n;i++){
  66. int u,v,w;
  67. scanf("%d%d%d",&u,&v,&w);
  68. addedge(u,v,w,tot);
  69. addedge(v,u,w,tot);
  70. }
  71. tot = ;
  72. int m;
  73. scanf("%d",&m);
  74. for(int i=;i<m;i++){
  75. int a,b,c;
  76. scanf("%d%d%d",&a,&b,&c);
  77. add_qedge(a,b,tot);
  78. add_qedge(b,a,tot);
  79. add_qedge(a,c,tot);
  80. add_qedge(c,a,tot);
  81. add_qedge(b,c,tot);
  82. add_qedge(c,b,tot);
  83.  
  84. }
  85. memset(vis,,sizeof(vis));
  86. dis[]=;
  87. Targin();
  88. int a[];
  89. for(int i=;i<m;i++){
  90. int s = i*;
  91. a[] = dis[eq[s].u]+dis[eq[s].v]-*dis[eq[s].lca]; ///a->b
  92. a[] = dis[eq[s+].u]+dis[eq[s+].v]-*dis[eq[s+].lca]; ///a->c
  93. a[] = dis[eq[s+].u]+dis[eq[s+].v]-*dis[eq[s+].lca]; ///b->c
  94. //sort(a,a+3);
  95. printf("%d\n",(a[]+a[]+a[])/);
  96.  
  97. }
  98. printf("\n");
  99. }
  100.  
  101. }

zoj 3195的更多相关文章

  1. zoj 3195 Design the city LCA Tarjan

    题目链接 : ZOJ Problem Set - 3195 题目大意: 求三点之间的最短距离 思路: 有了两点之间的最短距离求法,不难得出: 对于三个点我们两两之间求最短距离 得到 d1 d2 d3 ...

  2. zoj 3195(LCA加强版)

    传送门:Problem 3195 https://www.cnblogs.com/violet-acmer/p/9686774.html 题意: 给一个无根树,有q个询问,每个询问3个点(a,b,c) ...

  3. zoj——3195 Design the city

    Design the city Time Limit: 1 Second      Memory Limit: 32768 KB Cerror is the mayor of city HangZho ...

  4. ZOJ 3195 Design the city LCA转RMQ

    题意:给定n个点,下面n-1行 u , v ,dis 表示一条无向边和边权值,这里给了一颗无向树 下面m表示m个询问,问 u v n 三点最短距离 典型的LCA转RMQ #include<std ...

  5. ZOJ - 3195 Design the city

    题目要对每次询问将一个树形图的三个点连接,输出最短距离. 利用tarjan离线算法,算出每次询问的任意两个点的最短公共祖先,并在dfs过程中求出离根的距离.把每次询问的三个点两两求出最短距离,这样最终 ...

  6. zoj 3195 Design the city lca倍增

    题目链接 给一棵树, m个询问, 每个询问给出3个点, 求这三个点之间的最短距离. 其实就是两两之间的最短距离加起来除2. 倍增的lca模板 #include <iostream> #in ...

  7. ZOJ 3195 Design the city 题解

    这个题目大意是: 有N个城市,编号为0~N-1,给定N-1条无向带权边,Q个询问,每个询问求三个城市连起来的最小权值. 多组数据 每组数据  1 < N < 50000  1 < Q ...

  8. ZOJ 3195 Design the city (LCA 模板题)

    Cerror is the mayor of city HangZhou. As you may know, the traffic system of this city is so terribl ...

  9. LCA问题的ST,tarjan离线算法解法

    一  ST算法与LCA 介绍 第一次算法笔记这样的东西,以前学算法只是笔上画画写写,理解了下,刷几道题,其实都没深入理解,以后遇到新的算法要把自己的理解想法写下来,方便日后回顾嘛>=< R ...

随机推荐

  1. 禁用 nouveau 驱动

    安装Nvidia显卡的官方驱动和系统自带的nouveau驱动冲突. 安装网上方法尝试了modprob.d/blacklist.conf里的各种修改,重启以后还是没有成功警用nouveau驱动 最后看见 ...

  2. Ubuntu 14.04 64bit下Caffe + Cuda6.5/Cuda7.0 安装配置教程

    http://www.embeddedlinux.org.cn/emb-linux/entry-level/201612/21-6005.html 随着深度学习快速发展的浪潮,许多有兴趣的工作者都转入 ...

  3. ContentProvider学习

    1.创建类继承ContentProvider类,并实现增.删.改.查功能. public static final String AUTHORITY = "com.diysoul.lists ...

  4. mac os x之解决npm安装包失败,或者nodejs工程缺少依赖

    在国内做开发,由于各种各样的原因,导致网络总是那么不好,对于我们前端开发者,在使用npm的时候很可能因为网络问题导致包安装失败,然后我们又匆匆启动项目,导致缺少依赖等各种问题,下面将会介绍一个淘宝的n ...

  5. [技巧篇]07.JSON.parse() 和 JSON.stringify()

    JSON.parse() 用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age&q ...

  6. css常见水平居中

    行内元素居中 常见行内元素如文本,图片等居中时,通常是给父元素设置text-align:center 来实现.例如 HTML: <body> <div>我是文字,我要居中显示& ...

  7. 应用Xml.Linq读xml文件

    c#提供了System.Xml.Linq操作xml文件,非常方便,本文主要介绍如何应用System.Xml.Linq读取xml文件. xml文本 <?xml version="1.0& ...

  8. [Unity]模拟雨水的折射效果

    用GrabPass做的小玩具. 并不是真的计算了折射,只是简单地扰动了uv,对于雨水来说效果已经足够好了. Shader代码: Shader "Unlit/Rain" { Prop ...

  9. 【洛谷 P3899】 [湖南集训]谈笑风生 (主席树)

    题目链接 容易发现\(a,b,c\)肯定是在一条直链上的. 定义\(size(u)\)表示以\(u\)为根的子树大小(不包括\(u\)) 分两种情况, 1.\(b\)是\(a\)的祖先,对答案的贡献是 ...

  10. 利用certutil.exe 传文件

    certutill.exe 在Windows 7 及其之后的所有Windows Server和Workstation版本均预装 1. Encode file: certutil -encode kk. ...