P4427 [BJOI2018]求和


[TJOI2018]教科书般的扭曲虚空

懒得写了(雾

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define vd void
  4. typedef long long ll;
  5. il int gi(){
  6. int x=0,f=1;
  7. char ch=getchar();
  8. while(!isdigit(ch)){
  9. if(ch=='-')f=-1;
  10. ch=getchar();
  11. }
  12. while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
  13. return x*f;
  14. }
  15. #define mod 998244353
  16. int fir[300010],dis[600010],nxt[600010],id,dep[300010];
  17. int st[19][300010];
  18. il vd link(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
  19. ll C[101][101],B[51][101],inv[101];
  20. il ll pow(ll x,ll y){
  21. ll ret=1;
  22. while(y){
  23. if(y&1)ret=ret*x%mod;
  24. x=x*x%mod;y>>=1;
  25. }
  26. return ret;
  27. }
  28. il ll calc(ll k,ll n){
  29. if(n<0)return 0;
  30. ll ret=0;
  31. for(int i=1;i<=k+1;++i)ret+=C[k+1][i]*B[k][k+1-i]%mod*pow((n+1)%mod,i)%mod;
  32. return ret%mod*inv[k+1]%mod;
  33. }
  34. il vd dfs(int x,int fa=-1){
  35. for(int i=fir[x];i;i=nxt[i]){
  36. if(dis[i]==fa)continue;
  37. dep[dis[i]]=dep[x]+1;
  38. st[0][dis[i]]=x;
  39. dfs(dis[i],x);
  40. }
  41. }
  42. il int LCA(int a,int b){
  43. if(dep[a]<dep[b])std::swap(a,b);
  44. int c=dep[a]-dep[b];
  45. for(int i=18;~i;--i)if(c&(1<<i))a=st[i][a];
  46. for(int i=18;~i;--i)if(st[i][a]^st[i][b])a=st[i][a],b=st[i][b];
  47. if(a^b)a=st[0][a];
  48. return a;
  49. }
  50. int main(){
  51. #ifndef ONLINE_JUDGE
  52. freopen("4427.in","r",stdin);
  53. freopen("4427.out","w",stdout);
  54. #endif
  55. int n=gi(),a,b;
  56. for(int i=1;i<n;++i)a=gi(),b=gi(),link(a,b),link(b,a);
  57. dfs(1);
  58. C[0][0]=1;
  59. for(int i=1;i<101;++i){
  60. C[i][0]=1;
  61. for(int j=1;j<=i;++j)C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
  62. }
  63. inv[1]=1;for(int i=2;i<101;++i)inv[i]=(mod-(mod/i)*inv[mod%i]%mod)%mod;
  64. for(int k=1;k<51;++k){
  65. B[k][0]=1;
  66. for(int i=1;i<101;++i){
  67. for(int j=0;j<i;++j)B[k][i]+=C[i+1][j]*B[k][j]%mod;
  68. B[k][i]=(mod-B[k][i]%mod*inv[i+1]%mod)%mod;
  69. }
  70. }
  71. for(int i=1;i<19;++i)
  72. for(int j=1;j<=n;++j)
  73. st[i][j]=st[i-1][st[i-1][j]];
  74. int m=gi(),c,k;
  75. while(m--){
  76. b=gi(),c=gi(),a=LCA(b,c),k=gi();
  77. printf("%lld\n",(calc(k,dep[b])+calc(k,dep[c])-calc(k,dep[a])-calc(k,dep[a]-1)+mod+mod)%mod);
  78. }
  79. return 0;
  80. }

P4427 [BJOI2018]求和的更多相关文章

  1. Luogu P4427 [BJOI2018]求和

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

  2. 洛谷P4427 [BJOI2018]求和

    \(\Large\textbf{Description: } \large{一颗n个节点的树,m次询问,每次查询点i到点j的路径上所有节点点深度的k次方的和并对998244353取模(1\leq n, ...

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

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

  4. bzoj5293: [Bjoi2018]求和

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. sonarQube常见问题及分析

    阻断1.Close this"FileInputStream" in a "finally" clause.在finally中关闭FileInputStream ...

  2. Linux 系统开机自启的配置文件

    程序开机启动的配置文件(/etc/rc.local) # 系统级别 ntsysv # 图形界面设置自启程序 chkconfig(/etc/init.d/sshd) 处理开机启动的文件 # 用户级别 # ...

  3. Linux 文件特殊权限详解[suid/sgid/t]

    setuid(suid): 针对命令和二进制程序的,当普通用户执行某个(passwd)命令的时候,可以拥有这个命令对应用户的权限, 即让普通用户可以以root用户的角色执行程序或命令. setgid( ...

  4. codeforces 741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(启发式合并)

    codeforces 741D Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths 题意 给出一棵树,每条边上有一个字符,字符集大小只 ...

  5. SPH算法(求最小代价树)

    一.sph算法简介 1.最小代价树算法 SPH算法也叫做MPH( minimum path heuristic)算法, 用于构造时延约束最算法小代价组播树. 该算法中每 个目的结点通过与当前组播树有最 ...

  6. Windows 7防火墙阻止了远程桌面连接的解决方法

    在[系统属性]中已经设置了允许远程桌面连接了,但是还是不能远程桌面的话,很可能是你的windows防火墙处于“启用”状态,防火墙阻止了windows 7系统的远程桌面连接.你可以使用以下的方法检查解决 ...

  7. Spark系列-核心概念

    Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...

  8. UVa 11440 - Help Tomisu(欧拉函数 + 问题转换)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. log4j配置不生效

    可能原因是打包时候log4j.properties没有在classpath下面或者是加载时候被其他第三方jar包中的log4j.properties文件覆盖掉了,可以使用如下命令进行查看log4j具体 ...

  10. ethers.js-2-wallets and signers

    Application Programming Interface (API) Wallets and Signers A Wallet manages a private/public key pa ...