题目链接

bzoj5293: [Bjoi2018]求和

题解

暴力

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

代码

#include<cmath>
#include<cstdio>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar();
return x * f ;
}
#define int long long
const int mod = 998244353;
const int maxn = 300007;
struct node {
int v,next;
} edge[maxn << 1];
int head[maxn], num = 0 ;
inline void add_edge(int u,int v) {
edge[++ num].v = v; edge[num].next = head[u];head[u] = num;
} int P[maxn][57];
int n,m;
int deep[maxn] = {-1},sum[maxn][57];
int dad[maxn][27];
void dfs(int x,int fa) {
for(int i = 0; dad[x][i]; ++ i) dad[x][i + 1] = dad[dad[x][i]][i];
for(int i = head[x];i ;i = edge[i].next) {
int v = edge[i].v;
if(v == fa)continue;
deep[v] = deep[x] + 1; dad[v][0] = x;
dfs(v,x);
}
}
int k ;
int lca(int x,int y) {
if(deep[x] > deep[y]) std::swap(x,y);
for(int i = k;i >= 0;-- i) if(deep[dad[y][i]] >= deep[x]) y = dad[y][i];
if(y == x) return x;
for(int i = k;i >= 0;-- i) if(dad[y][i] != dad[x][i]) y = dad[y][i],x = dad[x][i];
return dad[x][0];
}
main() {
n = read();
for(int i = 1;i <= n;++ i) {
P[i][0] = 1,P[i][1] = i;
for(int j = 2;j <= 50;++ j)
P[i][j] = (long long) P[i][j - 1] * i % mod;
}
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;
k = log2(n) + 1;
for(int u,v, i = 1;i < n;++ i) {
u = read(), v = read();
add_edge(u,v); add_edge(v,u);
}
int m = read();
dfs(1,0);
while(m --) {
int a = read(),b = read(),k = read();
int LCA = lca(a,b);
if(LCA == 1) {
printf("%lld\n",(P[deep[a]][k] + P[deep[b]][k]) % mod);
}
else if(LCA == b || LCA == a) {
if(LCA == a) std::swap(a,b);
printf("%lld\n",(P[deep[a]][k] - P[deep[b] - 1][k] + mod ) % mod);
}
else printf("%lld\n",((P[deep[a]][k] + P[deep[b]][k] - P[deep[LCA]][k] - P[deep[LCA] - 1][k]) % mod + mod) % mod);
}
return 0;
}

最新文章

  1. C#-WinForm-Treeview-树状模型
  2. HTTP服务&amp;Ajax编程知识点导图
  3. 如何替换掉.net toolStrip控件溢出按钮背景图
  4. ABAP自定义类的构造方法
  5. 1057: [ZJOI2007]棋盘制作 - BZOJ
  6. Oracle EBS-SQL (SYS-7):表单个性化查询.sql
  7. Singleton(单例)模式
  8. Node.js初探之GET方式传输
  9. python获取机器信息脚本(网上寻找的)
  10. [CF976E]Well played!
  11. 【转】浅谈Java中的hashcode方法
  12. 初学python之路-day14
  13. 框架MyBatis
  14. git常用命令以及如何与fork别人的仓库保持同步
  15. docker容器使用
  16. Eclipse新建tld文件
  17. 关于页面传值页面的跳转,以及spring mvc 框架的流程问题
  18. Andrew Ng-ML-第十八章-大规模机器学习
  19. php 文件上传$_FILES中error返回值详解
  20. 随手练——HDU 1284 动态规划入门

热门文章

  1. swift学习笔记3
  2. Linux-Xshell会话保持
  3. 《高性能MySQL》——第一章MySQL的架构与历史
  4. Mogodb 学习一
  5. html5 canvas 奇怪的形状水平渐变(因为大多数的之前的文章把基础都打过了,所以开始写的快了,如果有不明白的,可以回顾下之前的)
  6. 也谈创业企业CEO该拿多少工资
  7. javascript命名空间
  8. Java 多线程(Thread) 同步(synchronized) 以及 wait, notify 相关 [实例介绍]
  9. nodejs 配置服务自启动
  10. 第一篇:初始Golang