poj1986 Distance Queries(lca又是一道模版题)
题目链接:http://poj.org/problem?id=1986
题意:就是老问题求val[u]+val[v]-2*val[root]就行。还有这题没有给出不联通怎么输出那么题目给出的数据一定
是联通的。
题解:就是单纯的lca。
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
const int M = 8e4 + 10;
vector<pair<int , int> >vc[M];
int p[M][20] , val[M] , deep[M];
void dfs(int pos , int pre , int d) {
p[pos][0] = pre;
deep[pos] = d;
int len = vc[pos].size();
for(int i = 0 ; i < len ; i++) {
int u = vc[pos][i].first;
if(u != pre) {
val[u] += val[pos] + vc[pos][i].second;
dfs(u , pos , d + 1);
}
}
}
void init(int n) {
for(int i = 0 ; i < 18 ; i++) {
for(int j = 1 ; j <= n ; j++) {
if(p[j][i] == -1) {
p[j][i + 1] = -1;
}
else {
p[j][i + 1] = p[p[j][i]][i];
}
}
}
}
int lca(int a , int b) {
if(deep[a] < deep[b]) {
swap(a , b);
}
int d = deep[a] - deep[b];
for(int i = 0 ; i < 18 ; i++) {
if(d & (1 << i)) {
a = p[a][i];
}
}
if(a == b) {
return a;
}
for(int i = 17 ; i >= 0 ; i--) {
if(p[a][i] != p[b][i] && p[a][i] != -1) {
a = p[a][i];
b = p[b][i];
}
}
return p[a][0];
}
int main() {
int n , m , u , v , w , k;
char cp[10];
while(scanf("%d%d" , &n , &m) != EOF) {
for(int i = 1 ; i <= n ; i++) {
val[i] = 0;
vc[i].clear();
}
for(int i = 1 ; i < n ; i++) {
scanf("%d%d%d%s" , &u , &v , &w , cp);
vc[u].push_back(make_pair(v , w));
vc[v].push_back(make_pair(u , w));
}
memset(p , -1 , sizeof(p));
dfs(1 , -1 , 1);
init(n);
scanf("%d" , &k);
while(k--) {
scanf("%d%d" , &u , &v);
printf("%d\n" , val[u] + val[v] - 2 * val[lca(u , v)]);
}
}
return 0;
}
poj1986 Distance Queries(lca又是一道模版题)的更多相关文章
- poj-1986 Distance Queries(lca+ST+dfs)
题目链接: Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 11531 Accepted ...
- [poj1986]Distance Queries(LCA)
解题关键:LCA模板题 复杂度:$O(n\log n)$ #pragma comment(linker, "/STACK:1024000000,1024000000") #incl ...
- POJ.1986 Distance Queries ( LCA 倍增 )
POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b) ...
- POJ1986 Distance Queries (LCA)(倍增)
Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 12950 Accepted: 4577 ...
- POJ 1986 - Distance Queries - [LCA模板题][Tarjan-LCA算法]
题目链接:http://poj.org/problem?id=1986 Description Farmer John's cows refused to run in his marathon si ...
- poj 1986 Distance Queries LCA
题目链接:http://poj.org/problem?id=1986 Farmer John's cows refused to run in his marathon since he chose ...
- POJ 1986 Distance Queries(LCA Tarjan法)
Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面 ...
- POJ 1986 Distance Queries LCA两点距离树
标题来源:POJ 1986 Distance Queries 意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + d ...
- 又是一道水题 hdu背包
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...
随机推荐
- ubuntu清理系统垃圾与备份
虽然linux下不会有windows下的那么多垃圾和磁盘碎片!但还是会留下一些用不着的临时文件或是多次升级后的N个旧的内核! 1,非常有用的清理命令: sudo apt-get autoclean s ...
- Echarts图表插件(4.x版本)使用(二、带分类筛选的多个图表/实例化多个ECharts,以关系图/force为例)
导读 如果想在一个页面里实例化带分类筛选的多个Echarts该怎么做呢? 曾探讨了带分类选择的关系图显示为自定义图片的需求实现,传送门ECharts图表插件(4.x版本)使用(一.关系图force节点 ...
- 从boosting谈起
Boosting 将一些表现效果一般(可能仅仅优于随机猜测)的模型通过特定方法进行组合来获得一个表现效果较好的模型.抽象地说,模型的训练过程是对一任意可导目标函数的优化过程. Adaptive boo ...
- 利用反射,更改string对象的value数组以达到改变string值。
package test; import java.lang.reflect.Field; import lombok.Value; public class Test1{ public static ...
- python3学习-pickle模块
pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 基本接口: pickle.dump(obj, file, [,protocol]) 注解:将对象obj保存到文件file中 ...
- Netty学习(四)-TCP粘包和拆包
我们都知道TCP是基于字节流的传输协议.那么数据在通信层传播其实就像河水一样并没有明显的分界线,而数据具体表示什么意思什么地方有句号什么地方有分号这个对于TCP底层来说并不清楚.应用层向TCP层发送用 ...
- WPF中ComboBox控件绑定键值对操作
WPF中下拉框将键值对作为其数据源的具体操作.本实例以枚举类型以及枚举特性描述字符串生成键值对来进行. namespace ViewC { /// <summary> /// View.x ...
- 《机器学习基石》---Linear Models for Classification
1 用回归来做分类 到目前为止,我们学习了线性分类,线性回归,逻辑回归这三种模型.以下是它们的pointwise损失函数对比(为了更容易对比,都把它们写作s和y的函数,s是wTx,表示线性打分的分数) ...
- c语言实现基本的数据结构(一) 线性表
#include <stdio.h> #include <tchar.h> #include <stdlib.h> #define LIST_INIT_SIZE 1 ...
- Kendo-Grid for Vue API and Template
写此博客的原因:在做项目时前端用的vue,后端用的jfinal.在前端veu中调用了kendo grid插件,但是在官方文档中对kendo grid for vue 的api和template都不太详 ...