题目链接 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 ; }

最新文章

  1. 也许你需要点实用的-Web前端笔试题
  2. postgresql是如何处理死连接(转)
  3. JDBC 精度
  4. 【Web】简谈如何监听浏览器的关闭
  5. 【转】oracle数据库中varchar2陷阱
  6. IOS触摸事件和手势识别
  7. 用VMware 8安装Ubuntu 12.04详细过程(图解)
  8. xamarin提供在线检查.net代码是否支援xamarin,ios,android
  9. Android四大组件——Service
  10. c++ 06
  11. adbetj657k
  12. Trie图
  13. 升级gitlab
  14. 【Golang笔记】Golang工具包Cobra安装记录
  15. Spring系列(二) Bean装配
  16. MySQL基础操作1
  17. CF1131E String Multiplication(???)
  18. Vim保存时权限不足
  19. 黑马程序员_Java基础视频-深入浅出精华版--视频列表
  20. Erlang/OTP:基于Behaviour的回调函数

热门文章

  1. 七周成为数据分析师06_MySQL
  2. POJ:2632-Crashing Robots
  3. asynctask 异步下载
  4. python 提交form-data之坑
  5. Windows清理打印池的方法
  6. Selenium WebDriver-操作键盘事件
  7. Maven之scope详解
  8. 在Notepad++里配置python环境
  9. string流;
  10. BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】