LCA模板 Tarjan
来源:互联网 发布:sql更新字段部分值 编辑:程序博客网 时间:2024/06/13 15:35
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string.h>using namespace std;const int maxn = 50005;int n, m, num,qnum, ans;int head[maxn], qhead[maxn], fa[maxn], dis[maxn], f[maxn][20], a[maxn][3];bool vis[maxn];struct node {int next, to, dist;}e[maxn];struct qnode{int next, to, k;}q[maxn<<1];void add(int from,int to,int dist){e[++num].next = head[from];e[num].to = to;e[num].dist = dist;head[from] = num;}void qadd(int from, int to, int k){q[++qnum].next = qhead[from];q[num].to = to;q[num].k = k;qhead[from] = qnum;}int find(int x){if (x == fa[x])return fa[x];return fa[x] = fa[fa[x]];}void merge(int x, int y){int fx = find(x);int fy = find(y);fa[fx] = fy;}void tarjan(int x){vis[x] = true;for (int i = qhead[x]; i; i = q[i].next) {int to = q[i].to;int k = q[i].k;if (vis[to])a[k][2] = find(to);}for (int i = head[x]; i; i = e[i].next) {int to = e[i].to;if (!vis[to]) {dis[to] = dis[x] + e[i].dist;tarjan(to);merge(to, x);}}}int main(){cin >> n;for (int i = 0; i < n; i++)fa[i] = i;for (int i = 1; i < n; i++) {int u, v, d;cin >> u >> v >> d;add(u, v, d);add(v, u, d);}cin >> m;for (int i = 1; i <= m; i++) {cin >> a[i][0] >> a[i][1];qadd(a[i][0], a[i][1], i);qadd(a[i][1], a[i][0], i);}tarjan(0);for (int i = 1; i <= m; i++) {cout << dis[a[i][0]] + dis[a[i][1]] - 2 * dis[a[i][2]];}return 0;}
阅读全文
0 0
- tarjan&&LCA模板
- 【模板】LCA Tarjan
- LCA之tarjan模板
- LCA Tarjan模板 HDU2586
- lca 离线tarjan模板
- LCA模板 Tarjan
- LCA离线tarjan算法模板
- HDU 2586 【LCA-Tarjan-模板】
- 单向无权LCA模板(Tarjan)
- LCA离线tarjan算法模板
- LCA Tarjan及倍增模板(POJ 1330)
- HDOJ2586 lca查询 tarjan模板程序
- 【模板】LCA Tarjan算法 (模板题:洛谷P3379)
- LCA离线模板(Tarjan)倍增模板 hdu2586
- Tarjan LCA
- Tarjan lca
- Tarjan LCA
- tarjan--lca
- 代码重构----使用java有限状态机来消除太多的if else判断
- 内部网络关于IaaS 建设的说明
- 手把手教你用git,非常详细,轻易上手
- 7、vue2.0用Vue.extend构建消息提示组件的方法实例实现alert模态框组件(2)
- 选择排序
- LCA模板 Tarjan
- Java 获取文件的MIME类型
- java 命令执行jar 或 class main
- android studio httpclient
- 最小的k个数 剑指office原题
- Java通过QQ邮箱发送邮件
- kmp 模板
- HR面试程序员,一般第一个问题会问什么
- 每天一个linux命令(2):cd命令