ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1)。适用于不更新信息且查询很多的问题。
题意:首先要计算出各个可到达点之间的长度,然后利用区间查找求解!

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxx=4e4+10;;
const int inf=0x3f3f3f3f;
int a[maxx];
int n,q;
int m;
int maxsum[maxx][20],minsum[maxx][20];
struct node{int v,cost;node(int v1,int cost1):v(v1),cost(cost1){}
};
vector<node>G[maxx];
void dfs(int u,int fa){for(int i=0;i<G[u].size();i++){int v=G[u][i].v;int w=G[u][i].cost;if(v==fa)continue;a[v]=a[u]+w;dfs(v,u);}
}
void RMQ(){for(int i=1;i<=n;i++){maxsum[i][0]=minsum[i][0]=a[i];}for(int j=1;(1<<j)<=n;j++){for(int i=1;i+(1<<j)-1<=n;i++){minsum[i][j]=min(minsum[i][j-1],minsum[i+(1<<(j-1))][j-1]);maxsum[i][j]=max(maxsum[i][j-1],maxsum[i+(1<<(j-1))][j-1]);}}
}
int maxl,minl;
void Query(int l,int r){int k=(int)((log(r-l+1))/log(2.0));maxl=max(maxsum[l][k],maxsum[r-(1<<k)+1][k]);minl=min(minsum[l][k],minsum[r-(1<<k)+1][k]);cout<<maxl-minl<<endl;
}int main(){int t;scanf("%d",&t);while(t--){scanf("%d %d",&n,&m);memset(a,0,sizeof(a));memset(maxsum,0,sizeof(maxsum));memset(minsum,0,sizeof(minsum));for(int i=1;i<=n;i++){G[i].clear();}for(int i=1;i<=n-1;i++){int a,b,cost;scanf("%d %d %d",&a,&b,&cost);G[a].push_back(node(b,cost));G[b].push_back(node(a,cost));}dfs(1,-1);RMQ();for(int i=1;i<=m;i++){int left,right;scanf("%d %d",&left,&right);if(left>right)swap(left,right);Query(left,right);}}return 0;
}

HDU2586(ST表+dfs)相关推荐

  1. NOIp 数据结构专题总结 (1):STL、堆、并查集、ST表、Hash表

    系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) STL structure std::vector #include <vector> std::vec ...

  2. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

  3. szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法

    昨天我们讲述了树状数组今天我们来讲ST表(解决静态RMQ (Rang Minmum/Maximum Query)问题的数据结构) 假如说我们暴力去查询区间的最值得话每次操作都是O(n) 如果询问次数跟 ...

  4. 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析

    目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...

  5. 【无码专区10】第K大查询(双向链表 /主席树+st表)

    已自我实现,但还是归入无码专区序列.哈哈哈哈哈 对于my idea部分,我的每一个想法都实现了,可供参考. problem 给定一个 1∼n1\sim n1∼n 的排列和 kkk,求所有 r−l+1≥ ...

  6. 牛客练习赛 67——ST表

    A.牛牛爱字符串 注意原字符串有空格,不要用cin #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC o ...

  7. 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)

    题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...

  8. 【BZOJ2588】Count on a tree,主席树维护链+ST表求LCA

    传送门 写在前面:一天下来就写了两道主席树的题--(codevs上的一道智障天梯不算) 思路: 才知道原来主席树不仅可以通过dfs序维护子树区间,还可以直接维护一条到根的链-- 我们建好主席树后,每次 ...

  9. LCA RMQ+ST表学习笔记

    RMQ RMQ问题:在给定的一个长度位N的区间中,有M个询问,每次询问给出区间[L,R],求出区间段元素的 最大值/最小值.对于RMQ问题很容易想到遍历的做法,将区间[L,R]中的元素遍历一遍,即可寻 ...

最新文章

  1. 剑网三通过VR来进行游戏快乐,是不是会加倍?什么时候用得上?
  2. 服务器u8系统数据库不存在,用友u8服务器端数据库不装
  3. lvm硬盘管理及LVM扩容
  4. eclipse-中如何显示工程树形结构
  5. ASP.net导出Excel的几种方式
  6. NLPIR使用(1)
  7. Chrome 52 将支持 ES7:Canary 通道已上线
  8. 正视苦难,民族的心灵史——1942
  9. c/c++成长之捷径
  10. 热议:为什么近些年硕士生考博意愿偏低?
  11. 老男孩python全栈s21day21作业(面向对象)
  12. 阿里矢量图iconfont的两种使用方法
  13. Mac idea破解到2100年
  14. CodeForces - 863B-Kayaking(暴力)
  15. 车载吸尘器方案-无刷马达运用2
  16. undefined reference to `__strncpy_chk‘ 解决方法
  17. 剑指offer做题记录
  18. 涉及数字的英语表示——总览
  19. 你想成为阿里巴巴的一名数据工程师吗?以下的应聘要求你得好好看了
  20. 子午学术论坛邀请注册码

热门文章

  1. re.search()用法详解
  2. python中map()函数使用方法
  3. 神经网络中的神经元常见激活函数绘制
  4. 文本特征处理(n-garm表示方法、长度规范)
  5. OpenCV4 C++学习 必备基础语法知识二
  6. Facebook开源高效图像Transformer,速度、准确率与泛化性能媲美SOTA CNN
  7. 基础知识——列表简介(二)
  8. 关于WeX5的初步学习
  9. JS页面加载完成触发事件
  10. 我的笔记本电脑有一个自带的摄像头 可是开机后在我的电脑里没有这个图标