题意:有 n 点的一颗树,每个节点有格子的权值,现在有两种操作,修改一个点的权值,或者求两点之间的路径上的第 k 大的权值。

其实看到这个题,就在 YY 各种做法,询问后得到貌似可能是关于主席树、树链剖分等高端数据结构做的,但事实上,大概是出题人也并不想出难题,只是为了练练手所以……直接把每个问题路径上的点权保存在数组中 sort 一下就行了。然后树上路径就果断是LCA了,不过这里LCA也就不用倍增了,直接一步一步向上爬然后顺便加数组就行了。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; const int maxn=8e4+;
const int maxm=maxn*; int fa[maxn],dep[maxn];
int head[maxn],point[maxm],nxt[maxm],size;
int n,num[maxn],que[maxn],cnt; void init(){
size=;
memset(head,-,sizeof(head));
} void add(int a,int b){
point[size]=b;
nxt[size]=head[a];
head[a]=size++;
point[size]=a;
nxt[size]=head[b];
head[b]=size++;
} void Dfs(int s,int pre){
fa[s]=pre;
dep[s]=dep[pre]+;
for(int i=head[s];~i;i=nxt[i]){
int j=point[i];
if(j==pre)continue;
Dfs(j,s);
}
} void Pre(){
dep[]=;
Dfs(,-);
} void Lca(int u,int v){
cnt=;
if(dep[u]>dep[v])swap(u,v);
while(dep[u]<dep[v]){
que[++cnt]=num[v];
v=fa[v];
}
while(u!=v){
que[++cnt]=num[u];
u=fa[u];
que[++cnt]=num[v];
v=fa[v];
}
que[++cnt]=num[u];
} int main(){
int m;
scanf("%d%d",&n,&m);
init();
for(int i=;i<=n;++i)scanf("%d",&num[i]);
for(int i=;i<n;++i){
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
}
Pre();
while(m--){
int f,a,b;
scanf("%d%d%d",&f,&a,&b);
if(f){
Lca(a,b);
if(cnt<f)printf("invalid request!\n");
else{
sort(que+,que+cnt+);
printf("%d\n",que[cnt-f+]);
}
}
else num[a]=b;
}
}

最新文章

  1. [LeetCode] Remove Linked List Elements 移除链表元素
  2. 初探canvas
  3. SVN服务器与测试服务器代码同步
  4. 谷歌CEO发布年度公开信:专注人工智能等6大业务领域
  5. 根据不同的实体及其ID来获取数据库中的数据
  6. Cocoa是什么?
  7. sublime text3安装相关知识粗略整理
  8. 从零开始设计SOA框架(二):请求/响应参数的设计
  9. 普林斯顿大学算法课 Algorithm Part I Week 3 排序算法复杂度 Sorting Complexity
  10. 使用reserve要再次避免不必要的分配
  11. 201771010141 周强《面向对象程序设计(java)》第十三周学习总结
  12. Winfrom中的几种传值方式
  13. centos7 搭建openvpn服务器
  14. 在Ubuntu中部署并测试HyperLedger Fabric 0.6
  15. php7新特性总结
  16. Altium Designer 绘图流程及快捷键
  17. SpringCloud 组件Eureka参数配置项详解
  18. ABAP-金额小写转大写
  19. jmeter-server中启动后端口总是不断在变化
  20. linux 常用命令,开发记住这些基本能够玩转linux

热门文章

  1. 访问google.com
  2. IE6/7常用的hack
  3. == 区别 equals
  4. (五)socket实践编程
  5. reg.test is not a function 报错
  6. django&quot;动态网页&quot;,&quot;动态url&quot;,&quot;调试方法&quot;
  7. python核心编程第六章练习6-15
  8. office openxml学习(一)
  9. a标签中的点击事件
  10. Less基础知识~~~实现css