BZOJ 4034 树上操作(树链剖分)

一种基于改进YOLOv8并与ORB-SLAM3融合的动态环境密集点云同步定位与建图(SLAM)方法 文章提出了一种基于改进 YOLOv8 与 ORB-SLAM3 融合的动态环境稠密点云 SLAM 方法,通过引入GSConv 卷积模块和VoVGSCSP 特征融合模块优化 YOLOv8 的轻量性,结合实时目标检测与语义分割技术去除动态特征点,显著提升了动态场景下的位姿估计精度。 阅读详情

题意:

思路:

这题让我对树剖的体会更加深入了
因为我们在组链(也就是划分轻重边)的时候,是使用dfs序来进行划分的,所以我们子树的节点也依旧是在一起的,也就是说,树剖的时候顺便标记下dfs完自己子树时候的标号,就可以顺便完成dfs序时的标号要求了

错误及反思:

这题没什么难的。。主要是对树剖的体会更深了

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1

struct edge{
    int to,next;
}e[N*2];
long long segtree[N*4],lazy[N*4];
int tot,tid,q,n;
int top[N],si[N],fa[N],first[N],son[N],depth[N],id[N],to[N],val[N],rnk[N];

void addedge(int x,int y){
    e[tot].to=y;
    e[tot].next=first[x];
    first[x]=tot++;
    e[tot].to=x;
    e[tot].next=first[y];
    first[y]=tot++;
}

void dfs1(int now,int bef,int dep){
    fa[now]=bef;
    depth[now]=dep;
    si[now]=1;
    for(int i=first[now];i!=-1;i=e[i].next)
        if(e[i].to!=bef){
            dfs1(e[i].to,now,dep+1);
            si[now]+=si[e[i].to];
            if(son[now]==-1) son[now]=e[i].to;
            else son[now]=si[e[i].to]>si[son[now]]?e[i].to:son[now];
        }
}

void dfs2(int now,int tp){
    top[now]=tp;
    id[now]=tid++;
    if(son[now]!=-1) dfs2(son[now],tp);
    for(int i=first[now];i!=-1;i=e[i].next)
        if(e[i].to!=fa[now]&&e[i].to!=son[now])
            dfs2(e[i].to,e[i].to);
    to[now]=tid-1;
}

void init(){
    tot=0; tid=1;
    memset(first,-1,sizeof(first));
    memset(son,-1,sizeof(son));
}

void pushup(int rt){
    segtree[rt]=segtree[rt<<1]+segtree[rt<<1|1];
}

void pushdown(int l,int r,int rt){
    if(lazy[rt]){
        int m=(l+r)/2;

        segtree[rt<<1]+=1ll*(m-l+1)*lazy[rt];
        lazy[rt<<1]+=lazy[rt];

        segtree[rt<<1|1]+=1ll*(r-m)*lazy[rt];
        lazy[rt<<1|1]+=lazy[rt];

        lazy[rt]=0;
    }
}

void build(int l,int r,int rt){
    if(l==r){
        segtree[rt]=val[rnk[l]];
        return ;
    }
    int m=(l+r)/2;
    build(lson);
    build(rson);
    pushup(rt);
}

void add(int L,int R,int v,int l,int r,int rt){
    if(L<=l&&R>=r){
        segtree[rt]+=1ll*v*(r-l+1);
        lazy[rt]+=v;
        return ;
    }
    pushdown(l,r,rt);
    int m=(l+r)/2;
    if(m>=L) add(L,R,v,lson);
    if(m<R) add(L,R,v,rson);
    pushup(rt);
}

long long query(int L,int R,int l,int r,int rt){
    if(L<=l&&R>=r)
        return segtree[rt];
    pushdown(l,r,rt);
    int m=(l+r)/2;
    long long ans=0;
    if(m>=L) ans+=query(L,R,lson);
    if(m<R) ans+=query(L,R,rson);
    pushup(rt);
    return ans;
}
void cal(int L,int R){
    int f1=top[L],f2=top[R];
    long long ans=0;
    while(f1!=f2)
    {
        if(depth[f1]<depth[f2])
        {
            swap(f1,f2);
            swap(L,R);
        }
        ans+=query(id[f1],id[L],1,tid-1,1);
        L=fa[f1];
        f1=top[L];
    }
    if(depth[L]>depth[R]) swap(L,R);
    ans+=query(id[L],id[R],1,tid-1,1);
    printf("%lld\n",ans);
}
int main(){
    init();
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++) scanf("%d",&val[i]);
    for(int i=0,u,v;i<n-1;i++){
        scanf("%d%d",&u,&v);
        addedge(u,v);
    }
    dfs1(1,1,1);
    dfs2(1,1);
    for(int i=1;i<=n;i++)
        rnk[id[i]]=i;
    build(1,n,1);
    while(q--){
        int ta; scanf("%d",&ta);
        if(ta==1){
            int tb,tc;
            scanf("%d%d",&tb,&tc);
            add(id[tb],id[tb],tc,1,n,1);
        }
        else if(ta==2){
            int tb,tc;
            scanf("%d%d",&tb,&tc);
            add(id[tb],to[tb],tc,1,n,1);
        }
        else{
            int tb;
            scanf("%d",&tb);
            cal(1,tb);
        }
    }
}
揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程 本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。 阅读详情

相关推荐

ModbusRTU串口读写报文解析

解析MODBUS报文的格式,讨论异常状态、读多个寄存器与写多个寄存器

Serendipitor的博客 9208

【数据结构】树链剖分

树链剖分

Video_game的博客 1566

MTK平台高效部署Qwen2.5大模型:从转换到推理全流程解析

本文详细解析了在联发科(MTK)NeuroPilot平台上高效部署Qwen2.5大模型的全流程。内容涵盖从环境搭建、模型转换、量化优化到编译部署与上机推理的完整步骤,重点分享了模型转换与模型运行的关键实践与避坑指南,旨在帮助开发者将大语言模型成功集成至移动及边缘设备。

zeta9的博客 376

树链剖分(重链剖分)

本文主要针对于还没有学习过这个算法的新手同学

m0_73666576的博客 3958

使用 VPN 访问太理内部网相关问题总结【太原理工大学】

电脑连接 VPN,访问校园内部网相关问题总结,太原理工大学。

m0_52861684的博客 9873

Rocky Linux 8.10下用cephadm快速搭建Ceph集群(附华为云镜像源配置)

本文详细介绍了在Rocky Linux 8.10操作系统上使用cephadm快速部署Ceph集群的实战指南,包括环境准备、系统配置、华为云镜像源优化、集群初始化及节点扩展等关键步骤。通过配置华为云镜像源,显著提升部署效率,适合企业级存储解决方案的需求。

weixin_30839881的博客 145

树链剖分

【算法介绍】 树链剖分就是将树分割成多条链,然后利用数据结构(线段树、树状数组等)来维护这些链。 当树的形态不发生改变的时候,我们可以先对其进行链的剖分,每条链就相当于一个序列,操作就可以被拆分成几条完整的链来解决,然后利用一些数据结构加以维护即可。 我们希望通过这样的方式,来达到一些树上修改、计算的目的 【算法流程】 轻重链剖分 概念引入:把一个节点u的所有儿子中size[v]最大的一个作为重儿子,则称(u,v)为重边,u到其余的儿子v'的边(u,v')为轻边。 性质:(u,v)为轻边.

andyc_03的博客 2032

(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程

本文的目标是尽可能简单地教授扩散。第一节介绍扩散的基本原理。第二节和第三节展示如何构建随机和确定性扩散采样器。第四部分介绍了密切相关的流匹配,可看作是扩散的推广。​第五节,强调实践中最重要的一些设计选择,包括采样器、噪声时间表和参数化方法。

qq_44681809的博客 1万+

树链剖分详解,看这一篇就够了

树链剖分详解,看这一篇就够了

Chat_lsm2024的博客 3763

图神经网络实战(2)——图论基础

图论 (Graph theory) 是数学的一个基本分支,涉及对图研究。图是复杂数据结构的可视化表示,有助于理解不同实体之间的关系。图论提供了大量建模和分析现实问题的工具,如交通系统、社交网络和互联网等。在本节中,将介绍图论的基本原理,主要涉及三个方面:图属性、图概念和图算法。

盼小辉丶的博客 1万+

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

bfq05234214的博客 414

BZOJ 4034[HAOI2015]树上操作 树链剖分

BZOJ 4034[HAOI2015]树上操作 树链剖分 Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin), freopen(s".out","w",stdout) #define maxn 110000 #define ...

EM LGH 130

YOLO11涨点优化:loss优化 | 一种新的基于Wasserstein距离的小目标检测评估方法,助力小目标涨点

提出了一种新的基于Wasserstein距离的小目标检测评估方法,通过它们对应的高斯分布计算它们之间的相似性

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1015

BZOJ---4034: [HAOI2015]树上操作【树链剖分】

题面: BZOJ----4034:[HAOI2015]树上操作 题意: 给定一颗树,支持三种操作:(1)单点修改(2)两点之间的最短路径上的所有点修改(3)询问两点之间的最短路径上的所有点的和 分析: 树链剖分真是个好东西,巧妙地将一棵树拍成线性的,这样就容易用数据结构维护区间问题了,与普通区间操作不同的是,它将树上两点之间的路径划分为logN个编号连续的区间,然后对每个区间进行普通操作...

KobeDuu 257

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

bzoj 4034[HAOI2015]树上操作 - 树链剖分

4034: [HAOI2015]树上操作 Time Limit:10 SecMemory Limit:256 MB Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问...

191

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

bzoj 4034 树上操作 树链剖分 解题报告

有一棵点数为 N 的树,以点 1 为根,且树点有边权。

Hawo11的博客 486

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【树链剖分】bzoj4034: [HAOI2015]树上操作

~biu~Descriptionsubmit 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。Input第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,

jmsyzsfq的博客 389

BZOJ4034 [HAOI2015]树上操作 树链剖分

欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4034 题意概括 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权...

weixin_30912051的博客 126

【bzoj4034】【HAOI2015】【树上操作】【树链剖分】

Description  有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 Input  第一行包含两个整数 N, M 。表示点数和操作数。 接下来一行

sunshinezff的专栏 1328

bzoj4034 [HAOI2015]树上操作——树链剖分

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4034 树剖裸题; 一定要注意 long long !!! update 的时候别忘了 pushdown ... 代码如下: #include<iostream> #include<cstdio> #include<cstring&gt...

aodan5477的博客 137

BZOJ 4034 树上操作 (树链剖分 线段树)

4034: [HAOI2015]树上操作Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。Input 第一行包含两个整数 N, M 。表示点数和操作数

w4149 474

[树链剖分]bzoj 4034—— [HAOI2015]树上操作

题目描述有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。解题思路树链剖分的裸题。更改一棵子树的值,就是在DFS序上更改一段区间。询问时,每条重链其实也可以看成一段区间,构造DFS先遍历重儿子就可以

CHN_JZ的博客 485

BZOJ 4034 [HAOI2015]树上操作 树链剖分

Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 Input 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,

I'm Growing 345

【BZOJ】4034 [HAOI2015]树上操作 树链剖分

题目传送门 这题的题目意思很明确,就是树链剖分。 但是,这题需要用到long long,在打lazy标记时需要强转,把int转成long long,我也在这里错了不下15次。 博主花了2天来改这道题,并和许多大佬的标程对比,并没有发现任何错误。偶然中改了这个地方,发现程序AC后,当即掀桌子…… 博主对此表示很难受…… 附上AC代码: #include #include #inclu

Chester King 340

【BZOJ 4034】【HAOI 2015】树上操作【树链剖分】

Description有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。Input第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,表示树中节点的初始权值。接

cyclization的小栈 296

BZOJ 4034 [HAOI2015]树上操作(树链剖分)

题目链接 BZOJ4034 这道题树链剖分其实就可以了。 单点更新没问题。 相当于更新 [f[x], f[x]]这个区间。 f[x]表示树链剖分之后每个点的新的标号。 区间更新的话类似DFS序,求出所对应的区间。 也就是[f[x], f[x] + size[x] - 1]。 给这个区间加上a即可。 询问的时候有两种方法,一个是直接套模板。 还有一种方法是,因为是查询x到1的权...

weixin_30570101的博客 106
上一篇: BZOJ 2243 染色(树链剖分)
下一篇: bzoj 3626 LCA (树链剖分)
Roll_Keyboard
博客等级 码龄9年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值