[bzoj5293][树上倍增]求和

Kubernetes集群环境搭建与初始化 Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。 阅读详情

Description

master 对树上的求和非常感兴趣。他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k 次方和,而且每次的k
可能是不同的。此处节点深度的定义是这个节点到根的路径上的边数。他把这个问题交给 了pupil,但pupil
并不会这么复杂的操作,你能帮他解决吗?

Input

第一行包含一个正整数n ,表示树的节点数。 之后n-1 行每行两个空格隔开的正整数i,j ,表示树上的一条连接点i 和点j 的边。
之后一行一个正整数m ,表示询问的数量。 之后每行三个空格隔开的正整数i,j,k ,表示询问从点i 到点j 的路径上所有节点深度的k
次方和。 由于这个结果可能非常大,输出其对998244353 取模的结果。 树的节点从1 开始标号,其中1 号节点为树的根。

Output

对于每组数据输出一行一个正整数表示取模后的结果。 1≤n,m≤300000,1≤k≤50

Sample Input

5

1 2

1 3

2 4

2 5

2

1 4 5

5 4 45

Sample Output

33

503245989

HINT

说明

样例解释

以下用d(i) 表示第i 个节点的深度。

对于样例中的树,有d(1)=0,d(2)=1,d(3)=1,d(4)=2,d(5)=2。

因此第一个询问答案为(2^5 + 1^5 + 0^5) mod 998244353 = 33

第二个询问答案为(2^45 + 1^45 + 2^45) mod 998244353 = 503245989。

题解

你可以发现K<=50,于是我们可以直接预处理每个点到根路径上的50个和
然后LCA跳一跳
就没了。。
今天状态真的差LCA各种码错

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=998244353;
struct node
{
    int x,y,next;
}a[610000];int len,last[310000];
void ins(int x,int y){len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;}
int col[310000];
int bin[25],fa[310000][25];
LL dep[310000];
inline void pre_tree_node(int x)
{
    for(register int i=1;bin[i]<=dep[x];++i)fa[x][i]=fa[fa[x][i-1]][i-1];
    for(register int k=last[x];k;k=a[k].next)
    {
        int y=a[k].y;
        if(y!=fa[x][0])
        {
            dep[y]=dep[x]+1;
            fa[y][0]=x;
            pre_tree_node(y);
        }
    }
}
LL sx[310000][55];
inline LL pow_mod(int a,int b)
{
    register LL ret=1;
    while(b)
    {
        if(b&1)ret=(LL)ret*a%mod;
        a=(LL)a*a%mod;b>>=1;
    }
    return ret;
}
void work(int x)
{
    for(int i=1;i<=50;i++)sx[x][i]=sx[fa[x][0]][i]+pow_mod(dep[x]-1,i);
    for(int k=last[x];k;k=a[k].next)
    {
        int y=a[k].y;
        if(y!=fa[x][0])work(y);
    }
}
int lca(int x,int y)
{
    if(dep[x]<dep[y])swap(x,y);
    for(int i=20;i>=0;i--)if(bin[i]<=dep[x] && dep[fa[x][i]]>=dep[y])x=fa[x][i];
    if(x==y)return x;
    for(int i=20;i>=0;i--)if(bin[i]<=dep[x] && fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
    return fa[x][0]; 
}
LL findsum(int x,int y,int op)
{
    int LA=lca(x,y);
    return (LL)(sx[x][op]+sx[y][op]-sx[LA][op]-sx[fa[LA][0]][op])%mod;
}
int n,m;
LL ans[310000];
int main()
{
    bin[0]=1;for(int i=1;i<=20;i++)bin[i]=bin[i-1]*2;
    scanf("%d",&n);
    for(int i=1;i<n;i++)
    {
        int x,y;scanf("%d%d",&x,&y);
        ins(x,y);ins(y,x);
    }
    fa[1][0]=0;dep[1]=1;
    pre_tree_node(1);
    work(1);
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {
        int x,y,op;scanf("%d%d%d",&x,&y,&op);
        printf("%lld\n",findsum(x,y,op));
    }
    return 0;
}
不用买机械臂!用Python+ROS仿真实现RGB-D物体抓取全流程(Gazebo/MoveIt教程) 本文详细介绍了如何利用Python和ROS仿真环境(Gazebo/MoveIt)实现RGB-D物体抓取全流程,无需购买昂贵机械臂硬件。从环境搭建、机械臂模型导入、深度视觉系统配置到MoveIt运动规划,提供完整的实战指南,特别适合个人开发者和学生团队进行机械臂抓取算法验证与开发。 阅读详情

相关推荐

S4HANA - Cost Elements成本要素

SAP这里面的配置逻辑很像,就是先建一个对象,然后不停给这个对象附加一些属性,给一个账户附加编号范围,附加账户组。所有模块的维度都在这个表里,看下图的GL,CO,COPA,AA,ML的都在ACDOCA里。要把这5个类型和六大要素对应,先得把六大要素和账户类型对应下(以下是个人理解,不知道对错):当然那个C是新来的,我觉得放在资产下面也行,就不画图了。S4的嵌入式分析是在业务逻辑都整套嵌入的情况下,预开发了数据模型,所以它能提供的就不仅是原始数据了,它能提供的是包含所有相关联的上下文的信息数据。

weixin_45689053的博客 2394

树上倍增法

最近公共祖先

实践求真知 1333

SAP软件外币评估系统配置与操作

文章摘要:本文详细介绍了SAP系统中外币评估的流程、策略及系统操作。外币评估是期末关账的重要环节,主要针对外币未清项目及资产/负债进行汇率重估,生成评估差异过账以反映真实财务状况。文中阐述了三种评估策略(不评估、增量评估、期末评估冲回)及适用场景,并提供了SAP系统外币评估的具体操作步骤(FAGL_FCV/FAGL_FC_VAL事务码)。同时,讲解了货币资金科目和未清项管理科目的评估差异处理方式,以及相关的系统配置(OB59、OBA1等)。文章还区分了已实现和未实现汇兑损益的会计处理,为企业外币业务管理提供

weixin_40672823的博客 1963

树上倍增的写法和应用(详细讲解,新手秒懂)

最近做了一些树上的练习题,发现倍增真的是一种处理树上问题的神奇、方便的方法。 我以前一直打树链剖分打得多,但是学了倍增之后就再也不想打树链剖分了(当然有些题目不得不打)。 倍增比起树链剖分,代码短,容易查错,时空复杂度也优很多(nlogn),只是功能有些欠缺。 倍增的思想是二进制。         首先开一个n×logn的数组,比如fa[n][logn],其中fa[i][j]表示i

Saramanda的博客 1万+

EPLAN二次开发入门:Visual Studio 2019环境配置与插件调试实战

本文详细介绍了EPLAN二次开发入门的关键步骤,重点讲解如何在Visual Studio 2019中配置开发环境并进行插件调试。通过创建符合命名规范的项目、引用核心API库、实现插件接口以及使用附加进程调试等实战技巧,帮助电气工程师快速掌握EPLAN插件开发,提升自动化设计效率。

h6i7j8的博客 763

保姆级教程:用Python+MM-Agent搭建自己的数学建模AI助手(支持GPT-4o/DeepSeek)

本文提供了一份详细的教程,教你如何使用Python和MM-Agent框架搭建数学建模AI助手,支持GPT-4o和DeepSeek-R1等LLM后端。从环境配置、HMML知识库集成到多LLM适配和建模流程实现,手把手教你构建智能建模系统,提升数学建模效率。

k6l7m8n9的博客 452

求和(洛谷P[4427],BJOI[2018],LCA)

文章目录题目思路心得代码 题目 描述 master 对树上的求和非常感兴趣。他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k 次方和,而且每次的k 可能是不同的。此处节点深度的定义是这个节点到根的路径上的边数。他把这个问题交给了pupil,但pupil 并不会这么复杂的操作,你能帮他解决吗? 输入 第一行包含一个正整数nnn,表示树的节点数。 之后n−1n-1n−1行每行两...

zyz_bz的博客 494

JavaScript(JS)、ECMAScript(ES)和TypeScript(TS)

JavaScript、ECMAScript和TypeScript是现代Web开发中不可或缺的技术。它们各自具有独特的特点和优势,相互补充,共同推动着Web开发的发展。了解它们的概念、特点、应用场景和发展历程,有助于我们更好地掌握和使用这些技术,提高开发效率,实现更高质量和更可靠的Web应用。

u013558123的博客 1720

简析树上倍增

树上倍增,可在树的某条链上随深度具有某种单调的性质时进行查找,使时间复杂度从暴力查找的O(N)O(N)O(N)变为O(log⁡N)O(\log N)O(logN)。 树上倍增需要构建数组f[N][⌈log⁡N⌉]f[N][\left \lceil \log N \right \rceil ]f[N][⌈logN⌉],其中f[n][i]f[n][i]f[n][i]代表的是从结点nnn向根节点方向走2i2^i2i步到达的结点。 很显然,f[n][0]f[n][0]f[n][0]即结点nnn的父节点,在建图时即可

u013455437的博客 452

【使用DeepSeek辅助Python接口性能自动化测试教程-实战教程】

访问DeepSeek官方网站,注册账号并获取API Key。此Key是调用DeepSeek API的必要凭证,务必妥善保管。安装时,注意勾选“Add Python to PATH”选项,以便系统能识别Python命令。确保你已安装Python 3.8或更高版本。会自动发现并执行所有以。

Dreams°的博客 2466

YOLOv11-seg改进系列 | 引入CVPR2022 MetaFormer,零参数池化Token混合+StarReLU MLP,精度涨不掉速

本文提出了一种改进YOLOv11分割任务的C3k2_PoolingFormer模块,通过引入MetaFormer架构和Pooling Token Mixer,在保持模型轻量化的同时增强全局感受野建模能力。核心创新包括:1)使用零参数的AvgPool3×3差值作为Token Mixer,实现高效邻域信息聚合和局部对比增强;2)采用StarReLU MLP替代传统激活函数,提升非线性表达能力。改进后模型仅增加6.1%参数量,却能显著提升分割精度,特别适用于需要长程依赖建模的实例分割任务。该设计为轻量级视觉模型提

qq_44224801的博客 433

牛客小白月赛23 树上求和(思维)

链接:https://ac.nowcoder.com/acm/contest/4784/G 题目描述 有一棵包含n个节点和n-1条边的树,规定树链(u,v)为树上从u到v的简单路径。 树的每条边上都有一个正整数,这个正整数被称作这条边的颜色,规定一条树链的权值w(u,v)为这条树链上所有边的颜色的代数和。 而整棵树的权值为所有不同的树链的权值的代数和。 已知所有边的颜色集合恰好为1到n-1这n-...

xiaolan7777777的博客 504

WPF+MVVM案例实战(一)- 设备状态LED灯变化实现

采用WPF+MVVM框架实现,MVVM框架使用CommunityToolkit.Mvvm 依赖包,代码案例部署了三个LED灯,按照红黄绿三色后台自动刷新状态进行变化,根据后台数据不同,UI层显示不同颜色。

lingshuangcanxue 1382

bzoj 5293 树上差分 and 倍增

题意:问你树上两点之间路径上 sigma(每个点深度^k); 解: 1、树上倍增时维护每个深度k次幂到根的前缀和 2、树上差分+简单容斥 #include<bits/stdc++.h> using namespace std; #define MAXN 300010 #define maxn 300010 #define en '\n' #define ll long long ...

fnq9999的博客 296

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[LCA]求和(bzoj5293)

基情链接 解题思路 LCA没什么好说的,对于这类树上路径的题向来lca比较好处理。值得一提的是,k次方是各边分别k次方。由于k比较小,其实就不用管他,处理k棵树即可。 一句话题意:求树上两个点之间的所有点“深度”之和。 我们就可以分解一下这一段路径,其实就是a到lca与b到lca,我们用一个前缀和,储存,差分思想再相减即可。 LCA被多减了1次,我们需加回来。 还有,此题需要取模,还是...

ywy 340

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

BZOJ 5293 [Bjoi2018]求和

题意:有50中权值,然后让你求树上的链的权值 思路:直接倍增LCA套一下就行了 代码: #include <bits/stdc++.h> using namespace std; typedef long long LL; LL read() { LL x=0,f=1;char ch=getchar(); while(ch<'0'||ch&g...

weixin_30535167的博客 114

Bzoj 5293 洛谷 4427 Upc6744 [Bjoi2018]求和 这辈子都学不会的LCA

题目链接:Bzoj : https://www.lydsy.com/JudgeOnline/problem.php?id=5293                  落谷 : https://www.luogu.org/problemnew/show/P4427 题目描述 master 对树上的求和非常感兴趣。他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的 kk次方和,...

passer__的博客 462

[bzoj5293][Bjoi2018]求和【最近公共祖先】

【题目链接】   https://www.lydsy.com/JudgeOnline/problem.php?id=5293 【题解】   大力O(N∗K)O(N∗K)O(N*K)预处理,然后每次询问时倍增求LCA。   这能算省选题? 【代码】 # include &lt;bits/stdc++.h&gt; # define ll long long # define...

D_Vanisher的博客 381

【换根法 并集查找 DFS LCA 割点 】3067. 在带权树网络中统计可连接服务器对数目|1909

给你一棵无根带权树,树中总共有 n 个节点,分别表示 n 个服务器,服务器从 0 到 n - 1 编号。同时给你一个数组 edges ,其中 edges[i] = [ai, bi, weighti] 表示节点 ai 和 bi 之间有一条双向边,边的权值为 weighti 。再给你一个整数 signalSpeed 。 如果两个服务器 a ,b 和 c 满足以下条件,那么我们称服务器 a 和 b 是通过服务器 c 可连接的 : a < b ,a != c 且 b != c 。 从 c 到 a 的距离是可以被 s

闻缺陷则喜何志丹 5111

bzoj2165 -- 倍增floyd

题意:给定一张有向图,求图中从1开始长度>=m且边数最少的路径经过的边数。 考虑倍增floyd。 令f[p][i][j]表示经过2p条边从i到j的最大长度。 那么f[p][i][j]=max{f[p-1][i][k]+f[p-1][k][j]} 令g[i][j]表示当前答案从i到j的最大长度。 求答案时从大到小枚举每个二进制位,更新g,若不存在从1开始长度>=...

280

浅说树上倍增(下)

书接上文。

CylMK的博客 920

【刷题】BZOJ 5293 [Bjoi2018]求和

Description master 对树上的求和非常感兴趣。他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k 次方和,而且每次的k 可能是不同的。此处节点深度的定义是这个节点到根的路径上的边数。他把这个问题交给 了pupil,但pupil 并不会这么复杂的操作,你能帮他解决吗? Input 第一行包含一个正整数n ,表示树的节点数。 之后n-1 行每行两个空格隔开的正整数i...

weixin_30753873的博客 189

BZOJ5397: circular【倍增】

5397: circular 去掉覆盖的点,求出最优的下一个线段(a[j].L>=a[i].R,min(a[j].R)),直接二分,check用倍增。 #include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int MAXN=100005; int m,...

XSamsara的博客 AFO 365

树上倍增和LCA算法---上

树上倍增: 建立deep和st数组,就可以求出从一个节点往上走s步来到的节点。比如求从16走3步来到的节点,16走3步来到第3层,首先枚举走4步(8步及更多的步数没必要枚举,因为16所在第6层都不足8步),查st表来到2节点,在第2层,所以不要;然后走2步,到第4层的10,所以走到10节点;查询过程:比如要查询a和b的最近公共祖先,先让深度大的节点走到深度小的节点的深度,就是让a走到第37层,然后同时走64步,发现都到达-1这个节点,所以不要;然后走32步,到达第5层的同一个节点,不要;

2301_80275822的博客 219

BZOJ3133[ballmachine]——倍增+优先队列

题目描述 有一个装球机器,构造可以看作是一棵树。有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下。如果同时有多个点可以走,那么会选择编号最小的节点所在路径的方向。比如依次在树根4放2个球,第一个球会落到1,第二个会落到3: 从某个位置拿走一个球,那么它上方的球会落下来。比如依次拿走5, 7, 8三个球: 输入 第一行:球的个数N,...

weixin_33805992的博客 257
上一篇: [bzoj1257][乱搞]余数之和
下一篇: [bzoj5016][莫队算法]一个简单的询问
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值