题目大意:

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

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

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

和求树上两点差不多

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

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

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

#include <bits/stdc++.h>
#define mem(i,j) memset(i,j,sizeof(i))
using namespace std; const int N=1e4+, Q=1e6+;
struct EDGE {
int to, w, nt;
}e[N<<], q[Q<<];
int head[N], tot, que[N], pos;
///和HDU2586一样的毒 询问开N 如果开Q会MLE
int fa[N], dis[N], root[N];
int n, m, t, ans[Q]; void init() {
tot=; mem(head,);
pos=; mem(que,);
mem(root,); mem(ans,-);
}
void addE(int u,int v,int w) {
e[tot].to=v, e[tot].w=w;
e[tot].nt=head[u];
head[u]=tot++;
}
void addQ(int u,int v,int w) {
q[pos].to=v, q[pos].w=w;
q[pos].nt=que[u];
que[u]=pos++;
}
int getfa(int u) {
if(fa[u]==u) return u;
return fa[u]=getfa(fa[u]);
}
void Tarjan(int u,int rt) {
fa[u]=u; root[u]=rt;
for(int i=head[u];i;i=e[i].nt) {
int v=e[i].to;
if(!root[v]) {
dis[v]=dis[u]+e[i].w;
Tarjan(v,rt); fa[v]=u;
}
}
for(int i=que[u];i;i=q[i].nt) {
int v=q[i].to;
if(root[v]==rt)
ans[q[i].w]=dis[u]+dis[v]-*dis[getfa(v)];
}
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&t)) {
init(); for(int i=;i<m;i++) {
int u,v,w; scanf("%d%d%d",&u,&v,&w);
addE(u,v,w); addE(v,u,w);
}
for(int i=;i<=t;i++) {
int u,v; scanf("%d%d",&u,&v);
addQ(u,v,i), addQ(v,u,i);
} for(int i=;i<=n;i++)
if(!root[i]) {
dis[i]=;
Tarjan(i,i);
} for(int i=;i<=t;i++)
if(ans[i]==-) puts("Not connected");
else printf("%d\n",ans[i]);
} return ;
}

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. Qt 线程基础(QThread、QtConcurrent、QThreadPool等)

      使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快. 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使 ...

  2. HTML a标签文字颜色

    1.css代码: a{color:#00F} a:hover{color:#f00}/* 鼠标经过悬停字体颜色 */ /* css 注释说明:以上代码为设置HTML中超链接统一字体颜色 */ .div ...

  3. C++ 操作json文件

    一.环境搭建: 参考文章:https://blog.csdn.net/fakine/article/details/79272090 二.创建实例: #include <stdio.h> ...

  4. Spring MVC源码分析(二):SpringMVC的DispatcherServlet的设计与实现

    概述   DispatcherServlet是SpringMVC的一个前端控制器,是MVC架构中的C,即controller的实现,用于拦截这个web应用的所有请求,具体为在web.xml中配置这个s ...

  5. 从内部重启python脚本

    我有一个基于python的GTK应用程序,可以加载几个模块.它是从(linux)终端运行的,如下所示: ./myscript.py --some-flag setting 用户可以从程序中下载(使用G ...

  6. 骑马修栅栏 Riding the Fences

    题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个 ...

  7. hdu6325 /// 上凸包

    题目大意: 给定n 为n个点 给定n个点的坐标 两个点(xi,yi) (xj,yj)之间的花费是 xi*yj-yi*xj (可能为负数) 要求从点1经过若干个点到点n最小花费的路径 且路径要按x轴方向 ...

  8. 使用wireshark在windows平台下捕获HTTP协议数据包中的帐号密码信息

    1.打开wireshark软件,从Interface List中选择相应的网卡,例如我的PC机上是“本地连接”,然后选择”Start”启动抓包程序. 2.打开学校主页,输入账号和密码登录校内邮箱. 3 ...

  9. keras 或 tensorflow 调用GPU报错:Blas GEMM launch failed

    GPU版的tensorflow在模型训练时遇到Blas GEMM launch failed错误,或者keras遇到相同错误(keras 一般将tensorflow作为backend,如果安装了GPU ...

  10. 10_PAE_非PAE

    前置知识: 在 windows 中 保护模式 有两种模式: 段保护 和 页保护 段保护 主要体现在 段选择子上:但是数据段.代码段.栈段等采用的都是4GB平坦模式,段的特征并没有那样展现.所以具体的保 ...