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

[医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey 本综述有两个独创之处,首先,与传统的调查方法直接将医学图像分割的文献划分为多个组,并对每个组详细介绍文献的方法相比,我们将目前流行的文献按照从粗到细的多层次结构进行分类。其次,本文重点研究了监督学习和弱监督学习方法,但未包括无监督方法,这种方法目前在医学图像领域并不流行。对于监督学习方法,我们从骨干网络的选择、网络块的设计和损失函数的改进三个方面对文献进行了分析。对于弱监督学习方法,我们分别根据数据增强,迁移学习和交互式分割研究文献。与已有的调查相比,本次调查的文献分类与以往有很大的不同,更便于读者了解相关 阅读详情

题意:

思路:

这题让我对树剖的体会更加深入了
因为我们在组链(也就是划分轻重边)的时候,是使用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);
        }
    }
}
从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡 YOLOv11结合OpenCV技术,精准识别和计数鸡蛋与鸡,广泛应用于养殖场、市场监控和自动化包装。通过深度学习与计算机视觉,提升农业生产效率,让智能化管理更简单高效。 阅读详情

相关推荐

Dify 深度进阶:从入门到精通AI应用构建

《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。

同名公众号:dify实验室 1949

【数据结构】树链剖分

树链剖分

Video_game的博客 1566

IFIX数据库Datebase当前值问号

IFIX数据库Datebase当前值问号,已解决,亲测有效 在OPC PowerTool有数据的情况下,IFIX数据库Datebase当前值显示???? 问题分析及解决方法 我的IFIX5.8版本,其它版本可参考 打开IFIX工作台:应用程序–任务控制–I/O驱动–OPC Client;查看OPC驱动是否被禁用,点击启动,变成激活状态即可;若点击启动无法激活OPC驱动,需要重新安装OPC驱动,方法如下: 下载I/O Driver文件 下载链接:https://download.youkuaiyun.com/down

Ron_Tso的博客 2759

树链剖分(重链剖分)

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

m0_73666576的博客 3958

芯片Tapeout前GDS Review | Calibre中如何切出gds中指定区域版图?

芯片Tapeout GDS Review 之Calibre中如何切出指定区域版图GDS

weixin_37584728的博客 1786

Ubuntu开发环境配置——持续更新

本文简要介绍了Ubuntu下的开发环境配置流程和问题分析与解决,更多内容持续更新中。

m0_53365889的博客 2224

树链剖分

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

andyc_03的博客 2032

IOS APP上架被拒 4.3(a) - Design - Spam,成功

成功解决IOS APP上架被拒 4.3(a) - Design - Spam,本篇博客记录了详细过程

qq_40147106的博客 6905

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

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

Chat_lsm2024的博客 3763

从零到一:用Python打造你的智能交互桌宠,附完整源码与打包指南

本文详细介绍了如何从零开始使用Python开发智能交互桌宠,涵盖环境配置、窗口创建、动图加载、交互功能实现及打包发布全流程。教程特别适合零基础开发者,通过完整源码和分步指南,帮助读者快速掌握桌面宠物开发技巧,打造个性化AI伴侣。

weixin_29094539的博客 292

数字电路与逻辑设计实验二 组合逻辑电路

1.组合逻辑电路功能测试 (1)用 2 片 74LS00 组成图 2.1 所示逻辑电路。为便于接线和检查,在图中要注明 芯片编号及各引脚对应的编号。 (2)图中 A、B、C 接逻辑开关,Y1,Y2 接发光管电平显示。 (3)按表 2.3 要求,改变 A、B、C 输入的状态,填表并写出 Y1,Y2 的逻辑表达式。 (4)将运算结果与实验结果进行比较。 2.测试用异或门(74LS86)和与非门组成的半加器的逻辑功能。 根据半加器的逻辑表达式可知,半加 器 Y 是 A、B 的异或,而进位 Z 是 A

欢迎交流学习心得 1277

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

OpenHarmony 显示Display驱动全栈解析:DisplayLayer + Gralloc + Gfx 三位一体,打造高性能图形底座

OpenHarmony Display显示驱动模块是系统图形渲染和显示功能的基础组件,负责管理显示设备、图层渲染、内存分配等核心功能。该模块采用HDI(Hardware Driver Interface)设计架构,为上层图形服务提供统一的显示能力接口,实现了显示设备的初始化、图层管理、内存分配与映射、硬件加速等关键功能。DisplayLayer:负责显示图层的管理, 包括图层创建、显示属性设置、图层填充及刷新等操作;

m0_67505153的博客 314

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

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

KobeDuu 257

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

191

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

Hawo11的博客 486

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【树链剖分】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、付费专栏及课程。

余额充值