P4427-[BJOI2018]求和【LCA】
正题
题目大意:https://www.luogu.org/problem/P4427
题目大意
一棵树,每次给一条路径,求路径上每个点的深度的kkk次方的和。
解题思路
路径上分成两条深度连续的链,所以我们可以先预处理出kkk次方的前缀和。
然后LCALCALCA就好了。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define S(l,r,k) ((sum[k][r]-sum[k][l-1]+XJQ)%XJQ)
#define ll long long
using namespace std;
const ll N=310000,XJQ=998244353;
struct node{ll to,next;
}a[2*N];
ll n,m,tot,ls[N],dep[N],f[N][21],sum[51][N];
queue<int> q;
void addl(ll x,ll y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void bfs()
{q.push(1);dep[1]=1;while(!q.empty()){ll x=q.front();q.pop();for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(dep[y]) continue;dep[y]=dep[x]+1;f[y][0]=x;q.push(y);}}for(ll i=1;i<=20;i++)for(ll j=1;j<=n;j++)f[j][i]=f[f[j][i-1]][i-1];
}
ll LCA(ll x,ll y,ll k)
{ll X=dep[x]-1,Y=dep[y]-1;if(dep[x]<dep[y])swap(x,y);for(ll i=20;i>=0;i--)if(dep[f[x][i]]>=dep[y])x=f[x][i];if(x!=y){for(ll i=20;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];x=f[x][0];y=f[y][0];}return (S(dep[x]-1,X,k)+S(dep[y]-1,Y,k)-S(dep[x]-1,dep[x]-1,k)+XJQ)%XJQ;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}for(ll i=1;i<=n;i++){sum[1][i]=i;for(ll j=2;j<=50;j++)sum[j][i]=sum[j-1][i]*i%XJQ;for(ll j=1;j<=50;j++)(sum[j][i]+=sum[j][i-1])%=XJQ; }scanf("%lld",&m);bfs();while(m--){ll x,y,k;scanf("%lld%lld%lld",&x,&y,&k);printf("%lld\n",LCA(x,y,k));}
}
P4427-[BJOI2018]求和【LCA】相关推荐
- BZOJ 5293 求和(LCA)
5293: [Bjoi2018]求和 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 203 Solved: 128 [Submit][Status ...
- LCA+差分【p4427】[BJOI2018]求和
Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的\(k\) 次方和,而且每次的\(k\) 可能是不同的.此处节点深度的 ...
- BJOI 2018 题解
[BJOI2018]求和 可以预处理每一个 k 的答案,树上差分减一下即可 [BJOI2018]治疗之雨 单独写:传送门 [BJOI2018]链上二次求和 枚举 l e n len len, a n ...
- yyb省选前的一些计划
突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...
- 洛谷P4458 /loj#2512.[BJOI2018]链上二次求和(线段树)
题面 传送门(loj) 传送门(洛谷) 题解 我果然是人傻常数大的典型啊-- 题解在这儿 //minamoto #include<bits/stdc++.h> #define R regi ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
- Uber提出损失变化分配方法LCA,揭秘神经网络“黑盒”
作者 | Janice Lan,Rosanne Liu等 译者 | 清儿爸 责编 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]神经网络(Neural networks,N ...
- 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)
整理的算法模板合集: ACM模板 注意x和y的LCA可以是x或者y本身 一.LCA的在线倍增算法 /*给定一棵包含 n个节点的有根无向树,有 m个询问,每个询问 给出了一对节点的编号 x和 y,询问 ...
- BZOJ 3626: [LNOI2014]LCA
3626: [LNOI2014]LCA Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2074 Solved: 828 [Submit][Stat ...
最新文章
- 解读 | 2019年10篇计算机视觉精选论文(上)
- php 分类标签推荐,MySQL / PHP:通过标签/分类法查找类似/相关的项目
- Git的stash操作
- Windows Server 2003 Clustering 服务
- AMESim R14 运行时出现许可证错误
- linux数据块的大小不一样,HDFS块大小默认为什么是64MB(或者是128MB)
- 如何linux查看mysql目录下日志_测试人员如何在linux服务器中查询mysql日志?
- 把Windows上的文件拷贝到AWS Linux系统上
- 如何在 .NETCore 中修改 QueryString ?
- 【机器学习-数据科学】第三节:数据分析实例 分析MovieLens电影数据
- directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
- 大学计算机 学生成绩表格,学生成绩分析系统的设计与实现
- codewars033: Duplicate Encoder 重复编码器
- excel 日期格式 mysql_EXCEL和MySQL日期格式之间的转换
- mssql2000跟mssql2005共享问题
- 百度api翻译html,帮助文档首页
- 中文写代码?开始不信后来用中文写了剧情小游戏!嗯,真香~
- 电脑计算机D盘红格式化不了,电脑D盘无法格式化提示Windows无法格式该驱动器的解决办法...
- 关于flex布局中,父元素高度auto,由一子元素撑开,另一子元素自适应高度问题
- chromel浏览器老是提示adobe flash player已过期
热门文章
- java判断时间区间 隔天_Java初中级程序员面试题宝典
- vc 控制台添加托盘显示_开源:ESP8266读DHT11温湿度,小程序实时显示
- 华为服务器如何用pe重装系统,教你华为u盘重装win10系统详细图文
- linux脚本 逻辑运算,Linux-shell-逻辑运算和;
- php cbd架构,CBD模式
- android动画送礼物,Android仿直播类app赠送礼物功能
- ssd windows未能启动服务器,ssd安装win10无法启动你安装方法对吗?来看一下
- HTML坐标不随着屏幕大小改变,HTML热区map坐标,随窗口大小自适应办法(javascript)...
- mysql安装目录centos_CentOS mysql安装系统方法
- python字符串设置字体_python怎么更改字符串后几位