Hdu 2874 Connections between cities
题意:
城市 道路 没有环 不一定连通的树 求两城市的最短距离 设想一下就是很多小树 那好办
思路:
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的更多相关文章
- hdu 2874 Connections between cities [LCA] (lca->rmq)
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- HDU 2874 Connections between cities(LCA Tarjan)
Connections between cities [题目链接]Connections between cities [题目类型]LCA Tarjan &题意: 输入一个森林,总节点不超过N ...
- hdu 2874 Connections between cities 带权lca判是否联通
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- hdu 2874 Connections between cities(st&rmq LCA)
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- hdu 2874 Connections between cities (并查集+LCA)
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- HDU 2874 Connections between cities(LCA)
题目链接 Connections between cities LCA的模板题啦. #include <bits/stdc++.h> using namespace std; #defin ...
- HDU——2874 Connections between cities
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- HDU 2874 Connections between cities (LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意是给你n个点,m条边(无向),q个询问.接下来m行,每行两个点一个边权,而且这个图不能有环路 ...
- HDU 2874 Connections between cities(LCA离线算法实现)
http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意: 求两个城市之间的距离. 思路: LCA题,注意原图可能不连通. 如果不了解离线算法的话,可以看我之 ...
- HDU 2874 Connections between cities(LCA(离线、在线)求树上距离+森林)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题目大意:给出n个点,m条边,q个询问,每次询问(u,v)的最短距离,若(u,v)不连通即不在同 ...
随机推荐
- ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号
方法一: public static string GetString(string str, int length) { int i = 0, j = 0; foreach(char chr in ...
- C++之友元函数
1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同 ...
- github 上的pull request总结
自己先要fork别人的代码. 然后把代码git clone到本地.. 当自己有提交的时候, 可以在git commit之后 git push origin master 然后这份git push or ...
- Ubuntu 安装vim出错
在Ubuntu 12.10中安装vim时出现了如下提示: www.linuxidc.com @linuxidc:/etc/apt$ sudo apt-get install vim正在读取软件包列表. ...
- hdoj 1260 Tickets【dp】
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- DOM方法
DOM常用方法: 方法 描述 getElementById() 返回带有指定 ID 的元素. getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组 ...
- OpenRisc-42-or1200的ALU模块分析
引言 computer(计算机),顾名思义,就是用来compute(计算)的.计算机体系结构在上世纪五六十年代的时候,主要就是研究如何设计运算部件,就是想办法用最少的元器件(那时元器件很贵),最快的速 ...
- grep:Binary file (standard input) matches
grep "key" xxx.log时输出 Binary file xxx.log matches 百度了一下:grep觉得这是二进制文件.解决方式:grep -a. grep - ...
- C# 之 System.Object
System.Object C#中全部的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承.假设我们没有明白指定继承类,编译器缺省觉得该类继承自System.Obj ...
- SVNclient安装与使用
Technorati 标签: SVN SVNclient安装与使用 1 下载最新版本号1.5.2 最新版本号:TortoiseSVN-1.5.2.13595-win32-svn-1.5.1.msi 下 ...