题目链接 Connections between cities

LCA的模板题啦。

 #include <bits/stdc++.h>

 using namespace std;

 #define REP(i,n)        for(int i(0); i <  (n); ++i)
#define rep(i,a,b) for(int i(a); i <= (b); ++i)
#define dec(i,a,b) for(int i(a); i >= (b); --i)
#define for_edge(i,x) for(int i = H[x]; i; i = X[i]) const int N = + ;
const int A = + ; int father[N], List[N], deep[N], E[N], X[N], H[N], V[N];
int f[N][A], g[N][A];
bool v[N];
int n, m, q, x, y, z;
int et; inline void Eddedge(int a, int b, int c){
E[++et] = b, X[et] = H[a], H[a] = et, V[et] = c;
E[++et] = a, X[et] = H[b], H[b] = et, V[et] = c;
} int getfather(int x){ return father[x] ? father[x] = getfather(father[x]) : x; } int Calc(int a, int b){
int ret = ; if (deep[a] < deep[b]) swap(a, b);
for (int i = , delta = deep[a] - deep[b]; delta; delta >>= , ++i)
if (delta & ) ret += g[a][i], a = f[a][i]; if (a == b) return ret; dec(i, , ) if (f[a][i] != f[b][i]){
ret += g[a][i];
ret += g[b][i];
a = f[a][i];
b = f[b][i];
} ret += g[a][];
ret += g[b][]; return ret;
} int main(){ while (~scanf("%d%d%d", &n, &m, &q)){ et = ;
memset(father, , sizeof father);
memset(H, , sizeof H); rep(i, , m){
scanf("%d%d%d", &x, &y, &z);Eddedge(x, y, z);
int fa = getfather(x), fb = getfather(y);
father[fa] = fb;
} int l = , r = , now = ;
memset(List, , sizeof List);
memset(deep, , sizeof deep);
memset(v, false , sizeof v);
memset(f, , sizeof f);
memset(g, , sizeof g); rep(p, , n) if (!v[p]){
for (l = , r = , v[p] = true, List[] = p; l <= r; ++l){
now = List[l];
for_edge(i, now) if (!v[E[i]]){
v[E[i]] = true;
f[E[i]][] = now;
g[E[i]][] = V[i];
deep[E[i]] = deep[now] + ; for (int j = ; f[E[i]][j]; ++j)
f[E[i]][j + ] = f[f[E[i]][j]][j],
g[E[i]][j + ] = g[E[i]][j] + g[f[E[i]][j]][j]; List[++r] = E[i];
}
}
} while (q--){
scanf("%d%d", &x, &y);
int fa = getfather(x), fb = getfather(y);
if (fa != fb) puts("Not connected"); else printf("%d\n", Calc(x, y));
} } return ; }

HDU 2874 Connections between cities(LCA)的更多相关文章

  1. HDU 2874 Connections between cities(LCA(离线、在线)求树上距离+森林)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题目大意:给出n个点,m条边,q个询问,每次询问(u,v)的最短距离,若(u,v)不连通即不在同 ...

  2. HDU 2874 Connections between cities(LCA离线算法实现)

    http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意: 求两个城市之间的距离. 思路: LCA题,注意原图可能不连通. 如果不了解离线算法的话,可以看我之 ...

  3. HDU 2874 Connections between cities(LCA+并查集)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2874 [题目大意] 有n个村庄,m条路,不存在环,有q个询问,问两个村庄是否可达, 如果可达则输出 ...

  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)

    dfs找出所有节点所在树及到树根的距离及深度及父亲. i和j在一棵树上,则最短路为dis[i]+dis[j]-dis[LCA(i,j)]*2. #include <cstring> #in ...

  6. Connections between cities(LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题目: Problem Description After World War X, a lot ...

  7. hdu 2874 Connections between cities [LCA] (lca->rmq)

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

  8. HDU 2874 Connections between cities(LCA Tarjan)

    Connections between cities [题目链接]Connections between cities [题目类型]LCA Tarjan &题意: 输入一个森林,总节点不超过N ...

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

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

随机推荐

  1. 重写laravel 异常抛出处理

    所有异常错误都由类App\Exceptions\Handler处理,该类包含两个方法:report和render. 这里我们只看render方法,该方法会将异常渲染到HTTP响应中,就是说上面的错误信 ...

  2. [译]The Python Tutorial#8. Errors and Exceptions

    [译]The Python Tutorial#Errors and Exceptions 到现在为止都没有过多介绍错误信息,但是已经在一些示例中使用过错误信息.Python至少有两种类型的错误:语法错 ...

  3. BZOJ 5215: [Lydsy2017省队十连测]商店购物

    裸题 注意+特判 #include<cstdio> using namespace std; const int mod=1e9+7; int F[1000005],mi[10000005 ...

  4. Python动态属性和特性(一)

    在Python中,数据的属性和处理数据的方法统称为属性.其实,方式只是可调用的属性.除了这二者之外,我们还可以创建特性(property),在不改变类接口的前提下,使用存取方法(即读取值和设置值方法) ...

  5. JAVA-基础(一)

    1.一个变量可以声明为final,这样做的目的是阻止它的内容被修改.这意味着在声明final 变量的时候,你必须初始化它(在这种用法上,final类似于C/C++中的const). 例如: final ...

  6. 网络编程基础socket 重要中:TCP/UDP/七层协议

    计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...

  7. PYday16&17-设计模式\选课系统习题

    1.设计模式:对程序做整体得规划设计,这样做是为了更好的实现功能,使代码的可扩展性更好有27种常见的设计模式.流行的设计模式参考书:GoF设计模式.大话设计模式设计模式是为了更好的实现模块间的解耦,便 ...

  8. mysql 索引和查询优化

    对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降.如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能 ...

  9. 06-python进阶-多线程下载器练手

    我们需要用python 写一个多线程的下载器 我们要先获取这个文件的大小 然后将其分片 然后启动多线程 分别去下载 然后将其拼接起来 #!/usr/bin/env python#coding:utf- ...

  10. TOJ4505: KOSARE

    TOJ4505: KOSARE  Time Limit(Common/Java):10000MS/30000MS     Memory Limit:65536KByteTotal Submit: 11 ...