#include <cstdio>
#include <cstring>
#include <queue>
#include <set>
#include <stack>
#include <cstdlib>
#include <algorithm>
#include <time.h>
#include <vector>
#include <cmath>
using namespace std;
typedef long long LL;
typedef pair<int,int>pii;
const int N=5e4+;
const int S=1e5+;
const int INF=0x3f3f3f3f;
struct Edge{
int v,w,next;
}edge[N*];
int head[N],tot,root[N],n,q;
void add(int u,int v,int w){
edge[tot].v=v;
edge[tot].w=w;
edge[tot].next=head[u];
head[u]=tot++;
}
struct Node{
int l,r,v;
}o[N*];
int sz;
void add(int &rt,int l,int r,int x){
o[++sz]=o[rt];rt=sz;
++o[rt].v;
if(l==r)return;
int m=(l+r)>>;
if(x<=m)add(o[rt].l,l,m,x);
else add(o[rt].r,m+,r,x);
}
int ask(int x,int y,int z,int l,int r,int k){
if(l==r)return l;
int c1=o[o[x].l].v+o[o[y].l].v-*o[o[z].l].v;
int m=(l+r)>>;
if(c1>=k)ask(o[x].l,o[y].l,o[z].l,l,m,k);
else ask(o[x].r,o[y].r,o[z].r,m+,r,k-c1);
}
int fa[N][],d[N];
void dfs(int u,int f,int w){
fa[u][]=f;d[u]=d[f]+;
if(u!=)add(root[u]=root[f],,S,w);
for(int i=head[u];~i;i=edge[i].next){
int v=edge[i].v;
if(v==f)continue;
dfs(v,u,edge[i].w);
}
}
int lca(int u,int v){
if(d[u]<d[v])swap(u,v);
for(int t=d[u]-d[v],i=;t;t>>=,++i)
if(t&)u=fa[u][i];
if(u==v)return u;
for(int i=;i>=;--i){
if(fa[u][i]!=-&&fa[u][i]!=fa[v][i])
u=fa[u][i],v=fa[v][i];
}
return fa[u][];
}
int main(){
while(~scanf("%d%d",&n,&q)){
tot=sz=;
memset(head,-,sizeof(head));
for(int i=;i<n;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
++w;
add(u,v,w),add(v,u,w);
}
memset(fa,-,sizeof(fa));
dfs(,,);
for(int j=;j<=;++j){
for(int i=;i<=n;++i){
if(fa[i][j-]!=-)fa[i][j]=fa[fa[i][j-]][j-];
}
}
while(q--){
int u,v;
scanf("%d%d",&u,&v);
int tp=lca(u,v);
int k=o[root[u]].v+o[root[v]].v-*o[root[tp]].v;
if(k&)k=k/+;
else k/=;
printf("%d\n",ask(root[u],root[v],root[tp],,S,k)-);
}
}
return ;
}

FZU 2237 中位数 主席树 树上k大的更多相关文章

  1. poj2104 主席树 区间K大 在线 无修改

    关于主席树: 主席树(Chairman Tree)是一种离线数据结构,使用函数式线段树维护每一时刻离散之后的数字出现的次数,由于各历史版本的线段树结构一致,可以相减得出区间信息,即该区间内出现的数字和 ...

  2. BZOJ2588 主席树 + 树上差分

    https://www.lydsy.com/JudgeOnline/problem.php?id=2588 题意:强制在线的询问树链权值第K小(无修) 这种类似于第K小的题,一般容易想到主席树,但是树 ...

  3. poj2104 划分树 区间K大 在线 无修改

    博主sbit....对于高级数据结构深感无力,然后这些东西在OI竟然烂大街了,不搞就整个人都不好了呢. 于是我勇猛的跳进了这个大坑 ——sbit 区间K大的裸题,在线,无修改. 可以用归并树(\(O( ...

  4. 【Luogu】P3384主席树模板(主席树查询K小数)

    YEAH!我也是一个AC主席树模板的人了! 其实是个半吊子 我将尽量详细的讲出我的想法. 主席树太难,我们先搞普通线段树好了 普通线段树怎么做?我的想法是查询K次最小值,每次查完把查的数改成INF,查 ...

  5. COJ 1011 WZJ的数据结构(十一)树上k大

    题解:主席树&DFS序. PS:为什么我一开始Wa了N发 是因为有一个左区间我写成[L,M+1]了.......................... #include<iostream ...

  6. Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)

    Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...

  7. 树上前k大的包含不重复结点的长链

    一棵树,不一定是二叉树,在每个结点最多只属于一条链的情况下,处理出其中最长的前k个的长度. 最近训练赛做到两道题了,有必要总结一下. 不过我不知道是否有更专门的叫法. 借鉴了这位大佬的博客:https ...

  8. F. Greedy Sequence(主席树区间k的后继)(The Preliminary Contest for ICPC Asia Nanjing 2019)

    题意: 查找区间k的后继. 思路: 直接主席树. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio&g ...

  9. bzoj4448 [Scoi2015]情报传递 主席树+树上差分

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4448 题解 练习一下主席树的基础练习题找回感觉. 对于每一次询问,第一问显然随便做. 第二问的 ...

随机推荐

  1. 高性能IO设计的Reactor和Proactor模式(转)

    在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作. 在比较这两个模式之前,我们首先的搞明白 ...

  2. nginx禁止目录php执行权限

    nginx禁止目录php执行权限,找到配置fastcgi.conf文件,一般在/usr/local/nginx/conf/下面,修改如下 location ~* ^/(data|uploads|tem ...

  3. 004.CleanUp方法

    定义: Delphi procedure CleanUp; 类型 可见性 所在源码 所在单元 父类 procedure protected System.RegularExpressionsCore. ...

  4. Python之路----文件操作

    文件操作 1.能调用方法的一定是对象,比如数值.字符串.列表.元组.字典,甚至文件也是对象,Python中一切皆为对象. str1 = 'hello' str2 = 'world' str3 = ' ...

  5. 用PLSQL Developer粘贴数据的时候报oracle variant conversion error for variable v0

    参考文章:http://bugcool.blog.51cto.com/2080571/664434 两个数据库表对着copy粘贴的时候,报这个错.只是我这边不是顺序不对,不知道为什么其中的一行换行了. ...

  6. UI设计的奥义

    个人觉得一个好的UI应该具备如下特点 1.符合人类认知行为 2.契合人体生物学 3.平滑,流畅 4.适当的交互会让你的应用更加成功 5.动态的内容才是招蜂引蝶的资本

  7. 不相交集合ADT

    不相交集合数据结构保持一组不相交的动态集合S={S1,S2,...,SK},每个集合通过一个代表来识别,代表即集合中的某个成员. 如果x表示一个对象,不相交集合支持以下操作: MAKE-SET(x): ...

  8. hdu 5510 Bazinga KMP+尺取法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:至多50组数据,每组数据至多500个字符串,每个字符串的长度最长为2000.问最大的下标( ...

  9. javaWeb中的/路径问题

    在写javaweb的时候,在写路径的时候,/有时候表示站点根目录,有时候表示当前web应用根目录,究竟如何区分呢? 首先,我们建议开发的时候,跳转之类的都是用绝对路径(注意:不是物理路径),而不是使用 ...

  10. JavaScript 找出数组中重复的元素

    实现检测数组重复元素的功能,需要注意一点的是,多个(2个或2个以上)重复元素,我们只需要挑出一个来就可以了. <!DOCTYPE html> <html> <head&g ...