HDU 2874 Connections between cities(LCA+并查集)
【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=2874
【题目大意】
  有n个村庄,m条路,不存在环,有q个询问,问两个村庄是否可达,
      如果可达则输出最短路。
【题解】
  因为不存在环,所以是森林,我们计算每个连通块的dfs序,计算块内每个点到根距离
      当两个点在同一个连通块时,我们输出其dis值之和减去其LCA的dis值,
      否则输出不想连。
【代码】
#include <cstdio>
#include <algorithm>
#include <climits>
#include <cstring>
using namespace std;
const int N=300010;
int d[N],num[N],dis[N],ed=0,x,y,c,n,m,i,w[N],v[N],vis[N],f[N],g[N],nxt[N],size[N],son[N],st[N],en[N],dfn,top[N],t;char ch;
void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
void add(int x,int y,int _w){v[++ed]=y;w[ed]=_w;nxt[ed]=g[x];g[x]=ed;}
void dfs(int x){
size[x]=1;
for(int i=g[x];i;i=nxt[i])if(v[i]!=f[x]){
f[v[i]]=x,d[v[i]]=d[x]+1;dis[v[i]]=dis[x]+w[i];
dfs(v[i]),size[x]+=size[v[i]];
if(size[v[i]]>size[son[x]])son[x]=v[i];
}
}
void dfs2(int x,int y){
st[x]=++dfn;top[x]=y;
if(son[x])dfs2(son[x],y);
for(int i=g[x];i;i=nxt[i])if(v[i]!=son[x]&&v[i]!=f[x])dfs2(v[i],v[i]);
en[x]=dfn;
}
int lca(int x,int y){
for(;top[x]!=top[y];x=f[top[x]])if(d[top[x]]<d[top[y]]){int z=x;x=y;y=z;}
return d[x]<d[y]?x:y;
}
void init(){
memset(g,dfn=ed=0,sizeof(g));
memset(v,0,sizeof(v));
memset(nxt,0,sizeof(nxt));
memset(son,-1,sizeof(son));
}
int fa[N],q;
int sf(int x){return fa[x]==x?x:fa[x]=sf(fa[x]);}
int main(){
while(~scanf("%d%d%d",&n,&m,&q)){
init();
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=0;i<m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c); add(b,a,c);
if(sf(a)!=sf(b)){
fa[sf(a)]=sf(b);
}
}
for(int i=1;i<=n;i++){
if(fa[i]==i){
dfs(i);
dfs2(i,i);
}
}
while(q--){
scanf("%d%d",&x,&y);
if(sf(x)!=sf(y))puts("Not connected");
else printf("%d\n",dis[x]+dis[y]-2*dis[lca(x,y)]);
}
}return 0;
}
HDU 2874 Connections between cities(LCA+并查集)的更多相关文章
- 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 ...
 - [hdu2874]Connections between cities(LCA+并查集)
		
题意:n棵树,求任意两点的最短距离. 解题关键:并查集判断两点是否位于一棵树上,然后求最短距离即可.此题可以直接对全部区间直接进行st表,因为first数组会将连接的两点的区间表示出来. //#pra ...
 - 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)
		
题目链接 Connections between cities LCA的模板题啦. #include <bits/stdc++.h> using namespace std; #defin ...
 - 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 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
		
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
 
随机推荐
- 移动端H5滚动穿透解决方案
			
最近遇到一个很 巨恶心的问题 ios10下面 页面弹窗有滚动穿透问题 各种google 终于找到了答案,但是体验还不是很好,基本能忍受 废话不多说,上方法 最后终于想到一个处理方案,就是第一种方案的 ...
 - Spring源码解析-实例化bean对象
			
spring加载配置文件,AbstractApplicationContext类中的refresh方法起着重要的作用. @Override public void refresh() throws B ...
 - C#弱引用
			
加菲猫 Just have a little faith. C#弱引用 .NET框架提供了另一有趣的特色,被用于实现多样的高速缓存.在.NET中弱引用通过System.WeakReference类实现 ...
 - 精通javascript笔记(智能社)——数字时钟
			
JS代码: <script type="text/javascript"> window.onload=function(){ //小于10的数字补零及数字转字符 ...
 - MUI 按两次返回键退出应用 及 地理位置获取
			
<span style="font-size:14px;"><span style="font-size:14px;"> mui.plu ...
 - 转载:Apache commons开源工具简介
			
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...
 - Codeforces Round #391 A B C D E
			
A. Gotta Catch Em' All! 题意 从给定的字符串中选取字符,问可构成多少个\(Bulbasaur\) // 想到柯南里一些从报纸上剪汉字拼成的恐吓信_(:з」∠)_ Code #i ...
 - es查询与聚合
			
""" 官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/aggregations.htm ...
 - linux 系统函数之 (dirname, basename)【转】
			
转自:http://blog.csdn.net/peter_cloud/article/details/9308333 版权声明:本文为博主原创文章,未经博主允许不得转载. 除非你的原件考虑跨平台. ...
 - ubuntu16.04搭建个人简易DLP
			
前言 最近一朋友让我帮忙搭建一台服务器,用做公司的服务器,但是该服务器需要满足一些安全要求,于是乎就有了下面的解决过程^_^ 需求 期望普通用户和管理员都能ssh登陆服务器,但禁止scp或者其他方式下 ...