题目大意:

在一个森林里 询问 u v 两点

若不能到达输出 "Not connected" 否则输出两点距离

https://blog.csdn.net/keyboarderqq/article/details/56842607

和求树上两点差不多

改变的是树上两点的vis标记改成了记录根节点

此时 继续搜时 判断vis未标记过 就改成了是否存在根节点

而 更新答案时 判断vis标记过 则改成了根节点是否与当前根节点相同

  1. #include <bits/stdc++.h>
  2. #define mem(i,j) memset(i,j,sizeof(i))
  3. using namespace std;
  4.  
  5. const int N=1e4+, Q=1e6+;
  6. struct EDGE {
  7. int to, w, nt;
  8. }e[N<<], q[Q<<];
  9. int head[N], tot, que[N], pos;
  10. ///和HDU2586一样的毒 询问开N 如果开Q会MLE
  11. int fa[N], dis[N], root[N];
  12. int n, m, t, ans[Q];
  13.  
  14. void init() {
  15. tot=; mem(head,);
  16. pos=; mem(que,);
  17. mem(root,); mem(ans,-);
  18. }
  19. void addE(int u,int v,int w) {
  20. e[tot].to=v, e[tot].w=w;
  21. e[tot].nt=head[u];
  22. head[u]=tot++;
  23. }
  24. void addQ(int u,int v,int w) {
  25. q[pos].to=v, q[pos].w=w;
  26. q[pos].nt=que[u];
  27. que[u]=pos++;
  28. }
  29. int getfa(int u) {
  30. if(fa[u]==u) return u;
  31. return fa[u]=getfa(fa[u]);
  32. }
  33. void Tarjan(int u,int rt) {
  34. fa[u]=u; root[u]=rt;
  35. for(int i=head[u];i;i=e[i].nt) {
  36. int v=e[i].to;
  37. if(!root[v]) {
  38. dis[v]=dis[u]+e[i].w;
  39. Tarjan(v,rt); fa[v]=u;
  40. }
  41. }
  42. for(int i=que[u];i;i=q[i].nt) {
  43. int v=q[i].to;
  44. if(root[v]==rt)
  45. ans[q[i].w]=dis[u]+dis[v]-*dis[getfa(v)];
  46. }
  47. }
  48. int main()
  49. {
  50. while(~scanf("%d%d%d",&n,&m,&t)) {
  51. init();
  52.  
  53. for(int i=;i<m;i++) {
  54. int u,v,w; scanf("%d%d%d",&u,&v,&w);
  55. addE(u,v,w); addE(v,u,w);
  56. }
  57. for(int i=;i<=t;i++) {
  58. int u,v; scanf("%d%d",&u,&v);
  59. addQ(u,v,i), addQ(v,u,i);
  60. }
  61.  
  62. for(int i=;i<=n;i++)
  63. if(!root[i]) {
  64. dis[i]=;
  65. Tarjan(i,i);
  66. }
  67.  
  68. for(int i=;i<=t;i++)
  69. if(ans[i]==-) puts("Not connected");
  70. else printf("%d\n",ans[i]);
  71. }
  72.  
  73. return ;
  74. }

HDU 2874 /// tarjan离线求森林里两点的距离的更多相关文章

  1. HDU 2586 /// tarjan离线求树上两点的LCA

    题目大意: 询问一棵树里 u 到 v 的距离 可由 dis[ u到根 ] + dis[ v到根 ] - 2*dis[ lca(u,v) ] 得到 https://blog.csdn.net/csyzc ...

  2. 【HDOJ2586】【Tarjan离线求LCA】

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) ...

  3. HDU 2874 LCA离线算法 tarjan算法

    给出N个点,M条边.Q次询问 Q次询问每两点之间的最短距离 典型LCA 问题   Marjan算法解 #include "stdio.h" #include "strin ...

  4. cogs 2450. 距离 树链剖分求LCA最近公共祖先 快速求树上两点距离 详细讲解 带注释!

    2450. 距离 ★★   输入文件:distance.in   输出文件:distance.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 在一个村子里有N个房子,一 ...

  5. LCA(最近公共祖先)--tarjan离线算法 hdu 2586

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

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

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

  7. SPOJ 10628 Count on a tree(Tarjan离线LCA+主席树求树上第K小)

    COT - Count on a tree #tree You are given a tree with N nodes.The tree nodes are numbered from 1 to  ...

  8. SPOJ 10628 Count on a tree(Tarjan离线 | RMQ-ST在线求LCA+主席树求树上第K小)

    COT - Count on a tree #tree You are given a tree with N nodes.The tree nodes are numbered from 1 to  ...

  9. Tarjan算法离线 求 LCA(最近公共祖先)

    本文是网络资料整理或部分转载或部分原创,参考文章如下: https://www.cnblogs.com/JVxie/p/4854719.html http://blog.csdn.net/ywcpig ...

随机推荐

  1. Java习题10.24

    Java习题10.24 1. 1,3.connect()与accept():这两个系统调用用于完成一个完整相关的建立,其中connect()用于建立连接.accept()用于使服务器等待来自某客户进程 ...

  2. Ubuntu 16.04系统上修改Docker镜像的存储路径 (转)

    转自:https://blog.csdn.net/qihongchao/article/details/80651492 dba专门挂了一个硬盘让我放项目(测试环境)因为系统空间比较小,希望把dock ...

  3. 2019杭电多校第一场hdu6579 Operation(线性基)

    Operation 题目传送门 解题思路 把右边的数尽量往高位放,构造线性基的时候同时记录其在原序列中的位置,在可以插入的时候如果那个位置上存在的数字的位置比新放入的要小,就把旧的往后挤.用这种发现构 ...

  4. jQuery 实现复选框全选、反选及获取选中的值

    实现复选框全选,反选及获取选中的值: 代码如下: <!doctype html> <html lang="en"> <head> <met ...

  5. 【三】Jmeter接口自动化测试系列之Http接口自动化实战

    作者:大虫 本文介绍 Jmeter 工具的 http 接口 自动化测试 实战! 为了通用性,就拿知乎 网站作为实战例子吧! 必备技能:http接口基础知识.抓包,本文不做详细介绍,不会的可以先百度恶补 ...

  6. Feign 系列(05)Spring Cloud OpenFeign 源码解析

    Feign 系列(05)Spring Cloud OpenFeign 源码解析 [TOC] Spring Cloud 系列目录(https://www.cnblogs.com/binarylei/p/ ...

  7. react map循环数据 死循环

    项目条件:react es6 antidesign 已在commonState中获取到list,但是在循环map填充DOM的时候陷入死循环. 原因:因为是子组件 ,在父组件请求数据的时候 有个时差过程 ...

  8. ios网络学习------2 用非代理方法实现同步post请求

    #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark post登录方法 -(void) ...

  9. spring-boot 集成ehcache报错:org.springframework.expression.spel.SpelEvaluationException: EL1008E:

    错误信息:org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'pageab ...

  10. redis 分析rdb中key

    1.问题: 单位一个redis集群内存报警,想找出所有的key的列表? 2.解决办法: 网上搜索是可以用redis-rdb-tools 这个工具进行分析 (1)centos6 默认安装python2. ...