hdu2586 LCA 离线算法
来源:互联网 发布:天猫精灵 知乎 编辑:程序博客网 时间:2024/05/18 18:20
大神的博客:http://blog.csdn.net/hnust_xiehonghao/article/details/9109295
#include <iostream>#include <string>#include <cstring>#include <cstdio>#include <cmath>#include <cstdlib>#include <algorithm>#include <queue>#include <map>#include <vector>#define MST(s,q) memset(s,q,sizeof(s))#define INF 0x3f3f3f3f#define MAXN 50005#define Lchild id<<1#define Rchild (id<<1)+1using namespace std;struct Query { int v, no;} tmp;int N, M, T, F[MAXN], dis[MAXN], level[MAXN], vis[MAXN], ans[MAXN];vector<int> node[MAXN], w[MAXN];vector<Query> query[MAXN];void init() { for (int i = 0; i < MAXN; i++) { F[i] = i; ans[i] = dis[i] = vis[i] = 0; level[i] = 1; node[i].clear(); query[i].clear(); w[i].clear(); }}int Find (int x) { if (F[x] == x) return x; return F[x] = Find (F[x]);}void Union (int x, int y) { int fa = Find (x), fb = Find (y); if (fa == fb) return; F[fb] = fa;}void LCA (int root, int value) { vis[root] = 1; dis[root] = value; int len = node[root].size(); for (int i = 0; i < len; i++) { int v = node[root][i]; if (vis[v]) continue; LCA (v, value + w[root][i]); // 递归子树 Union (root, v); } len = query[root].size(); for (int i = 0; i < len; i++) { int v = query[root][i].v, no = query[root][i].no; if (!vis[v]) continue; ans[no] = dis[root] + dis[v] - 2 * dis[Find (v)]; }}int main() { cin >> T; while (T--) { cin >> N >> M; init(); int u, v, z; for (int i = 1; i < N; i++) { scanf ("%d%d%d", &u, &v, &z); node[u].push_back (v), w[u].push_back (z); node[v].push_back (u), w[v].push_back (z); } for (int i = 0; i < M; i++) { scanf ("%d%d", &u, &v); tmp.no = i; tmp.v = v, query[u].push_back (tmp); tmp.v = u, query[v].push_back (tmp); } LCA (1, 0); for (int i = 0; i < M; i++) printf ("%d\n", ans[i]); }}
0 0
- hdu2586 LCA 离线算法
- poj1330+hdu2586 LCA离线算法
- HDU2586 离线tarjan LCA
- tarjan 离线 lca hdu2586
- HDU2586 How far away ?(LCA离线算法)
- hdu2586[lca离线tarjon算法][递归与非递归]
- LCA离线+在线+hdu2586(模板)
- HDU2586【LCA在线算法】
- 离线LCA hdu2586 How far away ?
- hdu2586 How far away ? (LCA离线)
- LCA在线算法(hdu2586)
- hdu2586 How far away? Tarjan(离线)算法求最近公共祖先LCA 待补完
- hdu2586-How far away ?(最近公共祖先(LCA),离线Tarjan算法)
- HDU2586 RMQ+ST && 离线算法
- hdu2586 LCA
- hdu2586(LCA)
- hdu2586 lca
- hdu2586 LCA入门(在线算法ST)
- windows环境下mongodb的下载与使用
- 大话数据结构五:线性表的链式存储结构(双向链表)
- NYOJ--202--红黑树
- Jetty 的工作原理以及与 Tomcat 的比较
- JSP application内置对象
- hdu2586 LCA 离线算法
- mysql round 1
- PTA 数据结构与算法题目集(中文)5-1 最大子列和问题 (20分)
- Louvain 社团发现算法学习(我的java实现+数据用例)
- 大话数据结构六:特殊的线性表(栈)
- gdb可以用于分析core文件
- 并发编程--CyclicBarrier屏障
- 算法细节系列(9):动态规划之01背包
- uubuntu 中的mysql数据库如何开启远程连接