题意:

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

思路:

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

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
const int N = ;
const int M = ;
int f[N],Next[*N],va[*N],wi[*N],Head[N];
int vis[N];
int nex[*M],to[*M],id[M],head[N],ans[M];
int find(int x)
{
if(x!=f[x])f[x]=find(f[x]);
return f[x];
}
int len,dis[N],l;
void add(int u,int v,int w)
{
va[len]=v;
wi[len]=w;
Next[len]=Head[u];
Head[u]=len++;
}
void add_x(int u,int v)
{
to[l]=v; nex[l]=head[u];
head[u]=l++;
} void lca(int u,int fa)
{
f[u]=u;
for(int i=Head[u];i!=-;i=Next[i])
{int v=va[i],w=wi[i];
if(v!=fa){ dis[v]=dis[u]+w;
lca(v,u);
f[v]=u;
}
}
vis[u]=;
for(int i=head[u];i!=-;i=nex[i])
{
int v=to[i];
if(vis[v])
{//puts("sadasd");
ans[i/]=find(v);
}
} } int main()
{
int k;
while(~scanf("%d%d%d",&n,&m,&k))
{
len=l=;
memset(Head,-,sizeof Head);
memset(head,-,sizeof head);
for(int i=;i<m;i++)
{ int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
dis[]=;
for(int i=;i<k;i++)
{
int u,v;
scanf("%d%d",&u,&v);
id[i]=u;
add_x(u,v);
add_x(v,u);
} memset(vis,,sizeof vis);
memset(f,,sizeof f);
memset(ans,-,sizeof ans);
for(int i=;i<=n;i++)if(vis[i]==)lca(i,);
for(int i=;i<l;i+=)
{ int a,b,c;
a=to[i];
b=id[i/]; if(find(a)!=find(b))puts("Not connected");
else {c=ans[i/]; printf("%d\n",dis[a]+dis[b]-*dis[c]);}
}
}
}

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. .net开源工作流引擎ccflow

    关于济南驰骋信息技术有限公司的.net开源工作流引擎 驰骋工作流引擎,工作流程管理系统:简称ccflow,驰骋一体化解决方案简称ccport. ccflow是济南驰骋信息技术有限公司向社会提供的一款1 ...

  2. Codeforces Round #208 (Div. 2) 358D Dima and Hares

    题目链接:http://codeforces.com/problemset/problem/358/D 开始题意理解错,整个就跪了= = 题目大意:从1到n的位置取数,取数的得到值与周围的数有没有取过 ...

  3. svn操作

    1.已经被svn管理的文件的复制.删除.重命名都要通过svn的命令来操作(在资源管理器中通过鼠标右键来完成)(复制粘贴可以通过右键按下移动来实现) 2.没有被svn管理的文件(没有被上传过的文件,没有 ...

  4. Oracle Hint 详解

    Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式. 因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Ora ...

  5. Individual Contest #1 and Private Training #1

    第一次的增补赛,也是第一场个人排位赛,讲道理打的和屎一样,手速题卡了好久还WA了好多发,难题又切不出来,这种情况是最尴尬的吧! Individual Contest #1: Ploblem D: 题意 ...

  6. 将.lib库文件转换成.a库文件的工具

    分享如下两个链接: 微盘: http://vdisk.weibo.com/s/ztzPTJIC52mz2 百度云盘: http://pan.baidu.com/s/11gTOc 使用方法,解压文件mi ...

  7. docker 查看容器详细

    http://www.docker.org.cn/book/docker/checking-running-image-12.html

  8. MST最小生成树及Prim普鲁姆算法

    MST在前面学习了Kruskal算法,还有一种算法叫做Prim的.这两者的区别是Prim算法适合稠密图,比如说鸟巢这种几乎所有点都有相连的图.其时间复杂度为O(n^2),其时间复杂度与边的数目无关:而 ...

  9. JS为Select下拉框添加输入功能

    JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于se ...

  10. linux内核学习-建议路线

    三大经典书: LDD: Linux Device Driver 容易上手 LKD: Linux Kernel Development 通俗易懂 UDK: Understand Linux Kernel ...