裸的树上倍增。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define rep(i,l,r) for (int i=(l); i<=(r); i++)
  5. using namespace std;
  6.  
  7. const int N=,mod=;
  8. struct E{ int to,nxt; }e[N*];
  9. int fa[N],a[N],dep[N],f[N][],sm[N][],pow[N][];
  10. int h[N],cnt,n,m,x,y,k;
  11.  
  12. void add(int u,int v){ e[++cnt].to=v; e[cnt].nxt=h[u]; h[u]=cnt; }
  13.  
  14. void Build(int x){
  15. dep[x]=dep[fa[x]]+;
  16. sm[x][]=; pow[x][]=;
  17. rep(i,,){
  18. pow[x][i]=((long long)pow[x][i-]*(long long)dep[x])%mod;
  19. sm[x][i]=(sm[fa[x]][i]+pow[x][i])%mod;
  20. }
  21. for (int i=h[x]; i; i=e[i].nxt)
  22. if (e[i].to!=fa[x]){
  23. fa[e[i].to]=x;
  24. f[e[i].to][]=x;
  25. Build(e[i].to);
  26. }
  27. }
  28.  
  29. int LCA(int x,int y){
  30. if (dep[x]<dep[y]) swap(x,y);
  31. for (int i=; i>=; --i)
  32. if (dep[f[x][i]]>=dep[y]) x=f[x][i];
  33. if (x==y) return x;
  34. for (int i=; i>=; --i)
  35. if (f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
  36. return fa[x];
  37. }
  38.  
  39. int main(){
  40. freopen("sum.in","r",stdin);
  41. freopen("sum.out","w",stdout);
  42. scanf("%d",&n);
  43. rep(i,,n-) scanf("%d%d",&x,&y),add(x,y),add(y,x);
  44. dep[]=-; Build();
  45. rep(i,,) rep(j,,n) f[j][i]=f[f[j][i-]][i-];
  46. scanf("%d",&m);
  47. rep(i,,m){
  48. scanf("%d%d%d",&x,&y,&k); int lca=LCA(x,y);
  49. printf("%d\n",((sm[x][k]+sm[y][k]-sm[fa[lca]][k]-sm[lca][k])%mod+mod)%mod);
  50. }
  51. return ;
  52. }

[BZOJ5293][BJOI2018]求和(倍增)的更多相关文章

  1. bzoj5293: [Bjoi2018]求和

    题目链接 bzoj5293: [Bjoi2018]求和 题解 暴力 对于lca为1的好坑啊.... 代码 #include<cmath> #include<cstdio> #i ...

  2. BZOJ5293: [Bjoi2018]求和 树上差分

    Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k  次方和,而且每次的k 可能是不同的.此处节点深度的定义是这个节点 ...

  3. BZOJ5293:[BJOI2018]求和(LCA,差分)

    Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k  次方和,而且每次的k 可能是不同的.此处节点深度的定义是这个节点 ...

  4. 【BZOJ5293】[BJOI2018]求和(前缀和,LCA)

    [BZOJ5293][BJOI2018]求和(前缀和,LCA) 题面 BZOJ 洛谷 题解 送分题??? 预处理一下\(k\)次方的前缀和. 然后求个\(LCA\)就做完了?... #include& ...

  5. P4427 [BJOI2018]求和

    P4427 [BJOI2018]求和 同[TJOI2018]教科书般的扭曲虚空 懒得写了(雾 #include<bits/stdc++.h> #define il inline #defi ...

  6. 【BJOI2018】求和 - 倍增LCA

    题目描述 $master$ 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的$k$次方和,而且每次的$k$可能是不同的.此处节点深度的定义是这个节点到根的路 ...

  7. LCA+差分【p4427】[BJOI2018]求和

    Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的\(k\) 次方和,而且每次的\(k\) 可能是不同的.此处节点深度的 ...

  8. Luogu P4427 [BJOI2018]求和

    这是一道巨狗题,我已无力吐槽为什么我怎么写都不过 我们对于这种无修改的边权题目有一个经典的树上差分套路: \(ans=sum_x+sum_y-2\cdot sum_{LCA(x,y)}\) 这里的\( ...

  9. 【刷题】BZOJ 5293 [Bjoi2018]求和

    Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k 次方和,而且每次的k 可能是不同的.此处节点深度的定义是这个节点到 ...

随机推荐

  1. c# 超长字符串截取固定长度后显示...(超长后面显示点点点) 通用方法

    通用方法: 此方法是采用unicode编码方式,一个汉字为2个字节,一个数字or字母是1个字节,此方法传入的第二个长度参数是unicode长度. 所以不用考虑截取的字符串是汉字还是英文字母的问题,参数 ...

  2. 网络流建图(典型)(EK)

    题目链接:https://cn.vjudge.net/contest/68128#problem/B 具体思路: 按照  源点 - > 食物 - > 牛1 - > 牛2 - > ...

  3. Python——列表的操作

    列表的操作:详细+易出错假设有两个列表:    list1 = [1,2,3]    list2 = ['a','b','c']列表的操作: 1.list.append()    append只接受一 ...

  4. 网页中嵌入swf文件的几种方法

    1. object + embed       传统的方法 优点:浏览器兼容性好,是 Macromedia 一直以来的官方方法缺点:a.embed 标签是不符合 W3C 的规范的,无法通过验证.当然, ...

  5. web项目启动首页能访问接口报404

    这个问题如果控制台没有报错,然后看一下日志,看看spring容器是否加载: 如果是一直卡在这里了,多半是resources文件下的配置有问题,或者是resources目录不是源文件,工具无法识别 我遇 ...

  6. linux nginx大量TIME_WAIT的解决办法--转

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 8535 CLOSE_WAIT 5 FIN ...

  7. git —— pycharm+git管理/编辑项目

    pycharm+git  管理/编辑项目 一.pycharm中配置github 二.配置git 并不是配置了GitHub就可以的.还需要配置一下Git 前提是本地中已经安装了git 三.把本地项目上传 ...

  8. 使用Appium 测试微信小程序和微信公众号方法

    由于腾讯系QQ.微信等都是基于腾讯自研X5内核,不是google原生webview,需要打开TBS内核Inspector调试功能才能用Chrome浏览器查看页面元素,并实现Appium自动化测试微信小 ...

  9. JAVA复习笔记分布式篇:zookeeper

        前言:终于到分布式篇,前面把JAVA的一些核心知识复习了一遍,也是一个JAVA程序员最基本要掌握的知识点,接下来分布式的知识点算是互联网行业的JAVA程序员必备的技能:     概念:ZooK ...

  10. elasticsearch学习笔记--原理介绍

    前言:上一篇中我们对ES有了一个比较大概的概念,知道它是什么,干什么用的,今天给大家主要讲一下他的工作原理 介绍:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户 ...