思路

第一个可以倍增,第二个讨论在a到lca的路径上还是lca到b的路径上,
倍增即可

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int jump[10010][16],sum[10010][16],fir[10010],nxt[10010*2],v[10010*2],w[10010*2],cnt,dep[10010],n;
void addedge(int ui,int vi,int wi){++cnt;v[cnt]=vi;w[cnt]=wi;nxt[cnt]=fir[ui];fir[ui]=cnt;
}
void dfs(int u,int f,int wx){dep[u]=dep[f]+1;jump[u][0]=f;sum[u][0]=wx;for(int i=1;i<15;i++)jump[u][i]=jump[jump[u][i-1]][i-1],sum[u][i]=sum[u][i-1]+sum[jump[u][i-1]][i-1];for(int i=fir[u];i;i=nxt[i]){if(v[i]==f)continue;dfs(v[i],u,w[i]);}
}
int lca(int x,int y){if(dep[x]<dep[y])swap(x,y);for(int i=15;i>=0;i--)if(dep[jump[x][i]]>=dep[y])x=jump[x][i];if(x==y)return x;for(int i=15;i>=0;i--)if(jump[x][i]!=jump[y][i])x=jump[x][i],y=jump[y][i];return jump[x][0];
}
int query_sum(int x,int y){int ans=0;if(dep[x]<dep[y])swap(x,y);for(int i=15;i>=0;i--)if(dep[jump[x][i]]>=dep[y]){ans+=sum[x][i];x=jump[x][i];}if(x==y)return ans;for(int i=15;i>=0;i--)if(jump[x][i]!=jump[y][i]){ans+=sum[x][i]+sum[y][i];x=jump[x][i],y=jump[y][i];}return ans+sum[x][0]+sum[y][0];
}
int kth_fa(int x,int k){for(int i=15;i>=0;i--){if((k>>i)&1)x=jump[x][i];}return x;
}
void init(void){memset(jump,0,sizeof(jump));memset(sum,0,sizeof(sum));memset(fir,0,sizeof(fir));memset(nxt,0,sizeof(nxt));memset(v,0,sizeof(v));memset(w,0,sizeof(w));cnt=0;memset(dep,0,sizeof(dep));
}
int main(){int T;scanf("%d",&T);while(T--){init();scanf("%d",&n);for(int i=1;i<n;i++){int a,b,c;scanf("%d %d %d",&a,&b,&c);addedge(a,b,c);addedge(b,a,c);}dfs(1,0,0);char opt[10];while(1){scanf("%s",opt);if(opt[1]=='O')break;if(opt[1]=='I'){int a,b;scanf("%d %d",&a,&b);printf("%d\n",query_sum(a,b));}else{int a,b,c;scanf("%d %d %d",&a,&b,&c);int LCA=lca(a,b);if(dep[a]-dep[LCA]+1>=c){printf("%d\n",kth_fa(a,c-1));}else{c-=dep[a]-dep[LCA];int t2=dep[b]-dep[LCA]+1;printf("%d\n",kth_fa(b,t2-c));}}}}return 0;
}

转载于:https://www.cnblogs.com/dreagonm/p/10768331.html

SP913 QTREE2 - Query on a tree II相关推荐

  1. LCA SP913 QTREE2 - Query on a tree II

    SP913 QTREE2 - Query on a tree II 给定一棵n个点的树,边具有边权.要求作以下操作: DIST a b 询问点a至点b路径上的边权之和 KTH a b k 询问点a至点 ...

  2. SPOJ - QTREE2 Query on a tree II(LCA)

    题目链接:点击查看 题目大意:给出一棵无根树,每条边都有权值,接下来有数次操作,每次操作分为两种类型: DIST x y:求出点x到点y的唯一路径上的权值和 KTH x y k:求出点x到点y的唯一路 ...

  3. 【SPOJ - QTREE2】Query on a tree II(LCA,倍增)

    题干: You are given a tree (an undirected acyclic connected graph) with N nodes, and edges numbered 1, ...

  4. 【SPOJ】Count On A Tree II(树上莫队)

    [SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...

  5. SPOJ 375. Query on a tree (树链剖分)

    题目链接: http://www.spoj.com/problems/QTREE/ 375. Query on a tree Problem code: QTREE You are given a t ...

  6. XXI Open Cup. Grand Prix of Korea I. Query On A Tree 17 树剖 + 二分 + 树带权重心

    传送门 文章目录 题意: 思路: 题意: 给你一棵树,每棵树初始权值都为000,现在给你两个操作: (1)(1)(1)将uuu的子树权值全部加111. (2)(2)(2)将(u,v)(u,v)(u,v ...

  7. SP10707 COT2 - Count on a tree II

    SP10707 COT2 - Count on a tree II 题意: 给定 n 个结点的树,每个结点有一种颜色. m 次询问,每次询问给出 u,v,回答 u,v 之间的路径上的结点的不同颜色数. ...

  8. 【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)

    文章目录 问题引入 介绍莫队算法及其实现过程 时间复杂度 莫队算法适用范围 莫队奇偶优化 普通莫队:小B的询问 树上莫队:SP10707 COT2 - Count on a tree II 回滚莫队: ...

  9. 【LCT】Tree II(luogu 1501)

    Tree II luogu 1501 题目大意 给出一棵树,让你进行若干操作,操作如下: 1.把两个点路径上的所有点权值加k 2.把两个点路径上的所有点权值乘k 3.把一条边断开,连上另一条边 4.查 ...

最新文章

  1. shell脚本编程学习笔记(四)shell操作数据库
  2. package.json 依赖包版本号
  3. 集员法对3D激光雷达和相机的外部校准
  4. LINUX 系统 安装Jexus 5.6和mono3.4 部署.net 环境
  5. SQLite数据库管理工具(SQLiteStudio)v3.1.1
  6. 【漫谈数据仓库】 如何优雅地设计数据分层
  7. Eureka服务器端启动时报错:Connection refused :connect
  8. c#使用椭圆签名算法制作软件序列号
  9. eclipse如何运行html文件,eclipse中applet嵌入html文件
  10. xtrabackup启动过程中出现的报错
  11. C++基础之函数的默认参数,什么是函数默认参数?
  12. cent os 查看服务器信息
  13. 加多宝首度披露"换头手术"的详细内幕
  14. 正交相机和透视相机的区别
  15. FeatherNets:卷积神经网络轻如羽毛,用于面部反欺骗
  16. 浅谈我国中小企业融资的问题及对策_毕业论文(20180404104959)
  17. 【论文笔记】AAAI2022多智能体强化学习论文五篇
  18. js 或者vue中for循环去掉最后一个逗号
  19. face++人脸识别接口实现原理(一)
  20. 如何快速实现一个基于Nginx网站的监控场景

热门文章

  1. .net下操作XML的几篇文章(downmoon收集自MSDN)
  2. javascript 滚动+停留 代码
  3. BZOJ1251序列终结者——非旋转treap
  4. jQuery-ui源代码重点难点分析
  5. Check Point在Google Play上发现大批感染Judy恶意软件的应用
  6. nodejs总结之redis模块
  7. web api 开发之 filter
  8. 第七篇 ScrollView控件
  9. 很多时候的心情,是需要一个无人的角落
  10. 最強御主人様!-Mighty My Master-全年龄汉化补丁(第二版修正)