题目链接

bzoj5293: [Bjoi2018]求和

题解

暴力

对于lca为1的好坑啊....

代码

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<algorithm>
  4. inline int read() {
  5. int x = 0,f = 1;
  6. char c = getchar();
  7. while(c < '0' || c > '9')c = getchar();
  8. while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar();
  9. return x * f ;
  10. }
  11. #define int long long
  12. const int mod = 998244353;
  13. const int maxn = 300007;
  14. struct node {
  15. int v,next;
  16. } edge[maxn << 1];
  17. int head[maxn], num = 0 ;
  18. inline void add_edge(int u,int v) {
  19. edge[++ num].v = v; edge[num].next = head[u];head[u] = num;
  20. }
  21. int P[maxn][57];
  22. int n,m;
  23. int deep[maxn] = {-1},sum[maxn][57];
  24. int dad[maxn][27];
  25. void dfs(int x,int fa) {
  26. for(int i = 0; dad[x][i]; ++ i) dad[x][i + 1] = dad[dad[x][i]][i];
  27. for(int i = head[x];i ;i = edge[i].next) {
  28. int v = edge[i].v;
  29. if(v == fa)continue;
  30. deep[v] = deep[x] + 1; dad[v][0] = x;
  31. dfs(v,x);
  32. }
  33. }
  34. int k ;
  35. int lca(int x,int y) {
  36. if(deep[x] > deep[y]) std::swap(x,y);
  37. for(int i = k;i >= 0;-- i) if(deep[dad[y][i]] >= deep[x]) y = dad[y][i];
  38. if(y == x) return x;
  39. for(int i = k;i >= 0;-- i) if(dad[y][i] != dad[x][i]) y = dad[y][i],x = dad[x][i];
  40. return dad[x][0];
  41. }
  42. main() {
  43. n = read();
  44. for(int i = 1;i <= n;++ i) {
  45. P[i][0] = 1,P[i][1] = i;
  46. for(int j = 2;j <= 50;++ j)
  47. P[i][j] = (long long) P[i][j - 1] * i % mod;
  48. }
  49. for(int i = 1;i <= n;++ i) for(int j = 1;j <= 50;++ j) P[i][j] = (P[i][j] + P[i - 1][j]) % mod;
  50. k = log2(n) + 1;
  51. for(int u,v, i = 1;i < n;++ i) {
  52. u = read(), v = read();
  53. add_edge(u,v); add_edge(v,u);
  54. }
  55. int m = read();
  56. dfs(1,0);
  57. while(m --) {
  58. int a = read(),b = read(),k = read();
  59. int LCA = lca(a,b);
  60. if(LCA == 1) {
  61. printf("%lld\n",(P[deep[a]][k] + P[deep[b]][k]) % mod);
  62. }
  63. else if(LCA == b || LCA == a) {
  64. if(LCA == a) std::swap(a,b);
  65. printf("%lld\n",(P[deep[a]][k] - P[deep[b] - 1][k] + mod ) % mod);
  66. }
  67. else printf("%lld\n",((P[deep[a]][k] + P[deep[b]][k] - P[deep[LCA]][k] - P[deep[LCA] - 1][k]) % mod + mod) % mod);
  68. }
  69. return 0;
  70. }

bzoj5293: [Bjoi2018]求和的更多相关文章

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

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

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

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

  3. [BZOJ5293][BJOI2018]求和(倍增)

    裸的树上倍增. #include<cstdio> #include<cstring> #include<algorithm> #define rep(i,l,r) ...

  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. 【刷题】BZOJ 5293 [Bjoi2018]求和

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

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

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

  8. [BJOI2018]求和(树链剖分)

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

  9. Luogu P4427 [BJOI2018]求和

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

随机推荐

  1. Flink窗口介绍及应用

    Windows是Flink流计算的核心,本文将概括的介绍几种窗口的概念,重点只放在窗口的应用上. 本实验的数据采用自拟电影评分数据(userId, movieId, rating, timestamp ...

  2. Linux shell 日期,时间相关的命令

    在shell脚本中,经常要用到跟获取日期相关的东西,这里记录一下Linux shell 获取日期的方法 获取当前日期:today=`date +"%Y-%m-%d"` 获取昨天的日 ...

  3. vue中的插槽slot

    插槽(slot):是组件的一块HTML模板,父组件决定这块模板显不显示以及怎么显示. 位置由子组件自身决定(slot现在组件template的什么位置,父组件传过来的模板将来就显示在什么位置) 匿名插 ...

  4. [Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务

    一.配置及准备工作 1.在 Maven 的 pom 文件中新增以下依赖: <dependency> <groupId>mysql</groupId> <art ...

  5. bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树

    http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...

  6. mybatis mapper接口开发dao层

    本文将探讨使用 mapper接口,以及 pojo 包装类进行 dao 层基本开发 mybatis dao 层开发只写 mapper 接口 其中需要 开发的接口实现一些开发规范 1. UserMappe ...

  7. 【两分钟教程】如何更改Xcode项目名称

    注意:视频在最后,还少了一个步骤:将Xcode中的名字叫做<企信通>的虚拟文件夹删掉,然后重新从硬盘中添加进来,这样就彻底完成了更改Xcode项目名称的目的.

  8. [译]How To Use the Linux Auditing System on CentOS 7

    本文是How To Use the Linux Auditing System on CentOS 7的中文版,翻译不到之处,还请指出和多多包涵.本文并不会完全遵从原文的一些格式,而是加入自己学习的理 ...

  9. 关于USBHID协议以及鼠标键盘描述符的解释【转】

    转自:https://blog.csdn.net/jiujiujiuqiuqiuqiu/article/details/47277685 一.HID设备识别 前面有提到关于SCSI协议的USB设备实现 ...

  10. 【转】java comparator 升序、降序、倒序从源码角度理解

    原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境jdk:1.7+ 前言之前我写过关于comparator的理解,但是都 ...