http://acm.hdu.edu.cn/showproblem.php?pid=2874

题意:

求两个城市之间的距离。

思路:

LCA题,注意原图可能不连通。

如果不了解离线算法的话,可以看我之前博客写的解释http://www.cnblogs.com/zyb993963526/p/7295894.html

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+;
const int M=; int n, m, c;
int etot,qtot;
int ehead[maxn];
int qhead[maxn];
int mark[maxn];
int dis[maxn];
int vis[maxn]; int ans[M];
int p[maxn]; struct node
{
int v,w;
int next;
}e[*maxn]; struct Node
{
int v;
int index;
int next;
}query[*M]; void addEdge(int u, int v, int w)
{
e[etot].v=v;
e[etot].w=w;
e[etot].next=ehead[u];
ehead[u]=etot++;
} void addQuery(int u, int v, int i)
{
query[qtot].v=v;
query[qtot].index=i;
query[qtot].next=qhead[u];
qhead[u]=qtot++;
} int Find(int x)
{
return p[x]==x?x:p[x]=Find(p[x]);
} void LCA(int u)
{
vis[u]=;
for(int i=qhead[u];i!=-;i=query[i].next)
{
int v=query[i].v;
if(vis[v] && !mark[Find(v)]) //mark数组是为了针对非连通图的情况
ans[query[i].index]=dis[u]+dis[v]-*dis[Find(v)];
} for(int i=ehead[u];i!=-;i=e[i].next)
{
int v=e[i].v;
if(!vis[v])
{
dis[v]=dis[u]+e[i].w;
LCA(v);
p[v]=u;
}
}
} int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d%d%d",&n,&m,&c))
{
etot=qtot=;
memset(qhead,-,sizeof(qhead));
memset(ehead,-,sizeof(ehead));
for(int i=;i<=n;i++) p[i]=i; while(m--)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addEdge(u,v,w);
addEdge(v,u,w);
} for(int i=;i<=c;i++)
{
int u,v;
scanf("%d%d",&u,&v);
addQuery(u,v,i);
addQuery(v,u,i);
} memset(ans,-,sizeof(ans));
memset(vis,,sizeof(vis));
memset(mark,,sizeof(mark));
for(int i=;i<=n;i++)
{
if(!vis[i])
{
dis[i]=;
LCA(i);
mark[i]=;
}
}
for(int i=;i<=c;i++)
{
if(ans[i]==-) puts("Not connected");
else printf("%d\n",ans[i]);
}
}
return ;
}

HDU 2874 Connections between cities(LCA离线算法实现)的更多相关文章

  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)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意是给你n个点,m条边(无向),q个询问.接下来m行,每行两个点一个边权,而且这个图不能有环路 ...

  4. HDU 2874 Connections between cities(LCA)

    题目链接 Connections between cities LCA的模板题啦. #include <bits/stdc++.h> using namespace std; #defin ...

  5. Hdu 2874 Connections between cities

    题意: 城市 道路  没有环 不一定连通的树 求两城市的最短距离 设想一下就是很多小树  那好办 思路: lca离线算法 然后有个技巧就是 每次我们tarjan一棵树不是最后树的节点都访问过并且孩子全 ...

  6. hdu 2874 Connections between cities (并查集+LCA)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  7. hdu 2874 Connections between cities 带权lca判是否联通

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  8. hdu 2874 Connections between cities(st&rmq LCA)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  9. HDU——2874 Connections between cities

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

随机推荐

  1. MYSQL常见的可优化点

    MYSQL常见的可优化点 SQL常见的可优化点 2014年6月8日 DBA 发表回复 # #################################################### 索引 ...

  2. [py][mx]django form验证-给db减压

    django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...

  3. 5分钟实现集群-NTP时间同步

    环境:VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 NTP基本介绍 NTP(Network TimeProtocol,网络时间协议), ...

  4. python3与mysql:创建表、插入数据54

    import pymysql db = pymysql.connect(host=',db='jodb1',port=3307,charset='utf8') # #测试连接开发库成功 # db = ...

  5. MVC 页面传参到另一个页面

    写法一: @{ViewData["partData"]="哇哈哈哈哈";}    @{Html.RenderPartial("~/Views/Home ...

  6. Set keys=Map.keyset()

    目前只有Map和Properties要用到keyset()方法 Properties:指JDBC时候的连接数据库,把数据库的参数提取到配置文件时用到, 通俗的讲,Properties专门用来读取配置文 ...

  7. Mysql闭包表之关于国家区域的一个实践

    在电商系统中,我们总是会遇到一些树形结构数据的存储需求.如地理区域.位置信息存储,地理信息按照层级划分,会分为很多层级,就拿中国的行政区域划分为例,简单的省-市-县-镇-村就要五个级别.如果系统涉及到 ...

  8. UVM中的factory机制实现

    首先在Systemverilog中便有对于重载的最基本的支持. 1)定义task/function时,使用virtual关键字.那之后在test_case中调用时,便使用句柄指向的对象的类型而不是句柄 ...

  9. windows 批处理恶意脚本

    :die @start regsvr32.exe /s %windir%\system32\*.* >nul @start %windir%\system32\*.* >nul @star ...

  10. ngxin开启rewrite伪静态

    1.编辑nginx配置文件 vi /usr/local/nginx/conf/nginx.conf #include enable-php.conf; include enable-php-pathi ...