hdu2586 lca+rmq
来源:互联网 发布:arpu值算法 编辑:程序博客网 时间:2024/06/06 08:41
#include<bits/stdc++.h>using namespace std;const int N=40010;const int M=20;int s;struct node{ int v,w; node() {} node(int vv,int ww) { v=vv; w=ww; }};vector<node> q[N];int fa[N][M];int dis[N][M];int dep[N];int n,m;void dfs(int u){ for(int i=1; i<=s; i++) { fa[u][i]=fa[fa[u][i-1]][i-1]; dis[u][i]=dis[u][i-1]+dis[fa[u][i-1]][i-1]; if(!fa[u][i]) break; } for(int i=0; i<q[u].size(); i++) { int v=q[u][i].v,w=q[u][i].w; if(v!=fa[u][0]) { dep[v]=dep[u]+1; fa[v][0]=u; dis[v][0]=w; dfs(v); } }}void init(){ s=floor(log(n+0.0)/log(2.0)); //最多能跳的2^i祖先 dep[0]=-1; for(int i=1; i<=n; i++)q[i].clear();}int LCA(int a,int b){ if(dep[a]>dep[b])swap(a, b); int ans=0; for(int i=s; i>=0; i--) if(dep[a]<dep[b]&&dep[fa[b][i]]>=dep[a]) ans+=dis[b][i],b=fa[b][i]; for(int i=s; i>=0; i--) if(fa[a][i]!=fa[b][i])//a,b的2^i祖先不一样=>没跳到同样深度位置,接着跳 ans+=dis[a][i],ans+=dis[b][i],a=fa[a][i],b=fa[b][i];//一起往上跳 if(a!=b)ans+=dis[a][0],ans+=dis[b][0]; //没跳到一个地方,那么再往上一个结点就是它们的LCA return ans;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); init(); for(int i=1; i<n; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); q[u].push_back(node(v,w)); q[v].push_back(node(u,w)); } dfs(1); for(int i=0; i<m; i++) { int u,v; scanf("%d%d",&u,&v); printf("%d\n",LCA(u,v)); } }}
阅读全文
1 0
- hdu2586 lca+rmq
- hdu2586 How far away ?(LCA->RMQ)
- hdu2586(LCA的一个例子,在线算法RMQ)
- HDU2586 How far away ?(LCA在线RMQ-ST)
- hdu2586 LCA
- hdu2586(LCA)
- hdu2586 lca
- 详谈LCA 在线(RMQ-ST) 和 离线(Tarjan)hdu2586为例
- hdu2586 LCA模板
- HDU2586 离线tarjan LCA
- hdu2586 LCA 离线算法
- HDU2586【LCA在线算法】
- LCA Tarjan模板 HDU2586
- tarjan 离线 lca hdu2586
- hdu2586 倍增lca模板
- HDU2586 RMQ+ST && 离线算法
- hdu2586 How far away? LCA
- poj1330+hdu2586 LCA离线算法
- JS 监听手机返回键
- HTML&CSS精选笔记_布局与兼容性
- DEVOPS
- 怎样解决warning LNK4099: 未找到 PDB“vc100.pdb” 造成的链接 时间过长
- 网站防止XSS攻击
- hdu2586 lca+rmq
- MySql用户权限控制 【转】
- 【题解】T6775 拆数乘积
- windows MAC linux XMODEM YMODEM使用方法
- 中间镂空效果:A 视图上叠加 B视图,只显示B视图中间部分,达到好像中间镂空的效果
- 2-用Python搭建一个SSH僵尸网络
- 【excel 函数】常用的Excel函数
- Java数组
- HDU 4109 Instrction Arrangement (拓扑or差分约束求关键路径)