hdu 2586 How far away ?【rmq+lca】
来源:互联网 发布:mysql bit类型比较 编辑:程序博客网 时间:2024/05/18 19:42
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<cstdio>#include<cstring>#include<vector>#include<iostream>#include<algorithm>using namespace std;const int N=40000+100;struct node{ int to,w;}t;int tot,n,m,vs[N*2+10],dep[N*2+10],id[N],dis[N],d[N*2+10][50];vector<node>g[N];void dfs(int v,int p,int de){ id[v]=tot; vs[tot]=v; dep[tot++]=de; for(int i=0;i<g[v].size();i++) { if(g[v][i].to!=p) { dis[g[v][i].to]=dis[v]+g[v][i].w; dfs(g[v][i].to,v,de+1); vs[tot]=v; dep[tot++]=de; } }}void rmq_init(int n){ memset(d,0xff,sizeof(d)); for(int i=0;i<n;i++) d[i][0]=i; for(int j=1;(1<<j)<=n;j++) for(int i=0;i+(1<<j)-1<n;i++) { int u=d[i][j-1]; int v=d[i+(1<<(j-1))][j-1]; if(dep[u]<dep[v]) d[i][j]=u; else d[i][j]=v; }}int query(int l,int r){ int k=0; while((1<<(k+1))<=r-l+1) k++; int u=d[l][k]; int v=d[r-(1<<k)+1][k]; if(dep[u]<dep[v]) return u; else return v;}int lca(int u,int v){ if(id[u]>id[v]) swap(u,v); return vs[query(id[u],id[v]+1)];}int main(){ int _,a,b,w; scanf("%d",&_); while(_--) { scanf("%d%d",&n,&m); for(int i=0;i<=n;i++) g[i].clear(); tot=0; for(int i=1;i<n;i++) { scanf("%d%d%d",&a,&b,&w); t.to=b; t.w=w; g[a].push_back(t); t.to=a; t.w=w; g[b].push_back(t); } dis[1]=0; dfs(1,-1,0); rmq_init(2*n-1); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); int ans=dis[a]+dis[b]-2*dis[lca(a,b)]; printf("%d\n",ans); } } return 0;}
0 0
- hdu 2586 How far away ?【rmq+lca】
- hdu 2586 How far away LCA在线RMQ(模板题)
- hdu 2586 How far away ? (LCA转RMQ)
- hdu 2586 How far away ?(LCA转RMQ~)
- LCA和RMQ练习,水题(LCA模板题):【hdu 2586】 How far away ?
- HDU 2586 How far away? LCA模板
- HDU 2586 - How far away ? (LCA)
- hdu 2586 How far away ?(LCA)
- HDU--2586--How far away ?【LCA】
- HDU 2586 How far away ?(LCA)
- hdu 2586 How far away ?(LCA)
- hdu 2586 How far away ?(LCA)
- HDU - 2586 How far away ?(LCA)
- How far away ? (hdu 2586 LCA)
- hdu 2586 How far away ?(LCA)
- HDU---2586-How far away(LCA)
- HDU 2586 How far away ?(LCA)
- HDU 2586How far away ?(LCA)
- 【CodeForces 626C】Block Towers
- POJ1064
- NFS挂载网络文件系统
- (4.1.23.7) 自定义控件三部曲之动画篇(五)——ValueAnimator高级进阶(一)
- 百度之星 2015资格赛 列变位法解密【字符串】
- hdu 2586 How far away ?【rmq+lca】
- ecshop二次开发--节日关怀
- Java学习-选择排序1-直接选择排序
- POJ1146 ID Codes(next_permutation全排列)
- HOG特征描述算子
- 1001. A+B Format (20)
- APP测试点总结
- 积木算法
- 动态规划——problem B