倍增lca,把路径上点全部拉出来拍个序输出第k大就过了。

不知道怎么过的,咱也不敢问。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define me(a,b) memset(a,b,sizeof(a))
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define pii make_pair
const int dir[4][2]= {0,-1,-1,0,0,1,1,0};
typedef long long ll;
const ll inFF=9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=1e5+5;
int f[maxn][30],head[maxn],val[maxn],ans[maxn],d[maxn];
int sign,n,q,flag=0;struct node
{int to,p;
}edge[maxn<<1];
void add(int u,int v)
{edge[sign]=node{v,head[u]};head[u]=sign++;
}
void init()
{sign=0;for(int i=0;i<=n;i++)head[i]=-1;
}
bool cmp(int x,int y)
{return x>y;
}
void dfs(int u)
{for(int i=1;(1<<i)<=n;i++)f[u][i]=f[f[u][i-1]][i-1];for(int i=head[u];~i;i=edge[i].p){int v=edge[i].to;if(v==f[u][0]) continue;d[v]=d[u]+1;f[v][0]=u;dfs(v);}
}
int get_lca(int a,int b)
{if(d[a]<d[b]) swap(a,b);int x=d[a]-d[b];for(int i=0;(1<<i)<=x;i++)if((1<<i)&x) a=f[a][i];if(a!=b){for(int i=(int)log2(n);i>=0;i--)if(f[a][i]!=f[b][i]) a=f[a][i],b=f[b][i];a=f[a][0];}return a;
}
int main()
{int x,y,z;while(cin>>n>>q){if(flag++) printf("\n");init();for(int i=1;i<=n;i++) scanf("%d",&val[i]);for(int i=1;i<n;i++) scanf("%d %d",&x,&y),add(x,y),add(y,x);f[1][0]=1,d[1]=1,dfs(1);while(q--){scanf("%d %d %d",&z,&x,&y);if(z==0) val[x]=y;else{int k=0;int lca=get_lca(x,y);while(x!=lca) ans[++k]=val[x],x=f[x][0];while(y!=lca) ans[++k]=val[y],y=f[y][0];ans[++k]=val[lca];if(z>k) printf("invalid request!\n");else {sort(ans+1,ans+1+k,cmp);printf("%d\n",ans[z]);}}}}return 0;
}

HDU - 3078 Network 倍增LCA相关推荐

  1. HDU 6203 ping ping ping (在线倍增lca+DFS序+树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 #include<bits/stdc++.h> using namespace st ...

  2. BZOJ 2144 跳跳棋(神仙建模题,倍增 LCA,二分)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2144 是 hydro 的 BZOJ ...

  3. 洛谷T1967 货车运输 Kruskal最大生成树倍增LCA

    这题的题意是:对于每组x.y,求x到y路径上最小边权的最大值. 于是可以使用最大生成树,因为最大生成树满足性质:生成树中最小边权最大,且任意两点间路径上最小边权最大. 有了树之后,要求路径,那就要考虑 ...

  4. [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MB Submit: 2131  Solved: 865 [Submit][Sta ...

  5. NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并

    思路: Kruskal求最大生成树+倍增LCA // by SiriusRen #include <cstdio> #include <cstring> #include &l ...

  6. HDU 2460 Network(双连通+树链剖分+线段树)

    HDU 2460 Network 题目链接 题意:给定一个无向图,问每次增加一条边,问个图中还剩多少桥 思路:先双连通缩点,然后形成一棵树,每次增加一条边,相当于询问这两点路径上有多少条边,这个用树链 ...

  7. 【Codeforces613D】Kingdom and its Cities【虚树】【Tree DP】倍增lca

    http://codeforces.com/problemset/problem/613/D 题意: 给出n个点的树,有q个询问,每次询问给出k个重要的点,问至少删掉多少个非重要的点,使得这个重要的点 ...

  8. 洛谷1967 火车运输 kruskal求最大生成树 倍增LCA维护最小值

    传送门 其实NOIP某些年的第三题也并不是很难嘛... 题目分析: 题目中要求求出某两点之间可以运输的最大重量,也就是这两个点的某条路径上边权最小的边的权值的最大值 很显然,题目中的运输最大重量与选择 ...

  9. 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))

    A-XOR SUM 通过简单观察得知连续四个数的异或值就是等于0,暴力找出左区间和右区间就可以了,最多跑四个单位 0^1^2^3==0   4^5^6^7=0 #include<bits/std ...

最新文章

  1. mongodb集合的增删
  2. 无毛刺的时钟切换电路(Glitch-free clock switching circuit)设计(Verilog)
  3. Linux 信号随笔
  4. 网站推广必备手册:SEO教程:搜索引擎优化入门与进阶(第2版)
  5. celeba数据集_人脸识别常用数据集介绍(附下载链接)及常用评估指标
  6. jupyter nootbook本地使用指南
  7. 一维和二维卷积和池化
  8. Python利用SMTP发邮件
  9. ios实现读写锁,AFN的实现
  10. matlab simulink光伏发电系统MPPT算法
  11. opengles图像处理之边缘检测
  12. Python绘图常用的库及介绍
  13. 高盛:79页区块链报告-《从理论到实践》(附下载)
  14. python可以在手机上学吗_Python 读书
  15. 利用python脚本批量自动下载Sentinel-1(哨兵1号)数据
  16. 85. 如何用 OPA5 编写测试用例来测试用户输入文本的功能
  17. 没有水印的夸克免费扫描
  18. 迈阿密大学的计算机系咋样,迈阿密大学计算机科学专业
  19. ThreadPoolExecutor 线程池的使用
  20. ECCV 2018论文解读及资源集锦(8月20日更新)

热门文章

  1. Android SpannableString 给TextView 设置颜色,删除线等
  2. 微信小程序自定义组件Component的简单使用
  3. Error: module pages/utils/util is not defined
  4. loj2058 「TJOI / HEOI2016」求和 NTT
  5. idea(3)-jetty配置
  6. 58前端内推笔试2017(含答案)
  7. 2.抽取代码(BaseActivity)
  8. 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败...
  9. 基于设计模式的学习之旅-----访问者模式(附源码)
  10. 数据挖掘的一些经典算法