SDOI 2011 染色 树链剖分

黑猫带你学UFS协议第17篇:UFS安全模式详解(Secure Mode) 本文详细介绍了UFS协议中的安全模式,包括Erase, Discard, Purge和Wipe Device操作。Erase用于永久删除数据并确保无法恢复;Discard不保证数据清除;Purge类似于Sanitize,清除内部未映射的物理块数据;Wipe Device则是格式化设备。这些操作涉及逻辑单元、擦除单位、相关寄存器配置等,确保数据安全。" 126036669,12409270,MySQL 8.0 开窗函数详解,"['数据库理论', 'SQL'] 阅读详情

题意:

给定一棵有n个节点的无根树和m个操作,操作有2类:

1)将节点a到节点b路径上所有点都染成颜色c;
2)询问节点a到节点n路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。

n, m <= 100000

思路:

树的形态没有改变,用树链剖分维护即可。

在线段树上维护区间内的颜色前缀,后缀以及颜色段数构成一个三元组(pre,suf,tot),则可很方便地合并信息:

(pre1, suf1, tot1) + (pre2, suf2, tot2) = (pre1, suf2, tot1 + tot2 - (suf1 == pre2))

注意一开始输入的颜色对应的点在线段树中的编号与原编号不同,查询操作合并信息要特别注意不要加反了。

又复习了一遍树剖,感觉细节比较多,写的时候要想清楚。。。

#include <cstdio>
#include <vector>

#define For(i,j,k) for(int i = j;i <= (int)k;i++)

#define lc (h << 1), L, M
#define rc (h << 1 | 1), M+1, R
#define root 1, 1, n
#define M ((L + R) >> 1)

using namespace std;

int n, m;

const int N = 100010;

int fa[N], id[N], top[N], co[N], c[N], sz[N], son[N], dep[N], e;
vector<int> G[N];

void DFS1(int h){
    sz[h] = 1, dep[h] = dep[fa[h]] + 1;
    For(i,0,G[h].size() - 1){
        int v = G[h][i];
        if(v == fa[h]) continue;
        fa[v] = h;
        DFS1(v);
        sz[h] += sz[v];
        if(sz[v] > sz[son[h]]) son[h] = v;
    }
}

void DFS2(int h){
    id[h] = ++e;
    c[e] = co[h];
    top[h] = son[fa[h]] == h ? top[fa[h]] : h;
    if(son[h]) DFS2(son[h]);
    For(i,0,G[h].size() - 1){
        int v = G[h][i];
        if(v == fa[h] || v == son[h]) continue;
        DFS2(v);
    }
}

struct info{
    int pre, suf, tot;

    info rev(){
        return (info){suf, pre, tot};
    }

    info operator + (const info& A) const{
        return (info){pre, A.suf, tot + A.tot - (suf == A.pre)};
    }
};

struct SegmentTree{
    info A[N<<2];
    int col[N<<2];

    void pushup(int h){
        A[h] = A[h << 1] + A[h << 1 | 1];
    }

    void pushdown(int h, int L, int R){
        if(col[h]){
            Modify(lc, L, M, col[h]), Modify(rc, M+1, R, col[h]);
            col[h] = 0;
        }
    }

    void Create(int h, int L, int R){
        if(L == R) A[h] = (info){c[L], c[L], 1}, col[h] = c[L];
        else{
            Create(lc), Create(rc);
            pushup(h);
        }
    }

    void Modify(int h, int L, int R, int l, int r, int v){
        if(l <= L && R <= r)
            A[h] = (info){v, v, 1}, col[h] = v;
        else{
            pushdown(h, L, R);
            if(l <= M) Modify(lc, l, r, v);
            if(r > M) Modify(rc, l, r, v);
            pushup(h);
        }
    }

    info Query(int h, int L, int R, int l, int r){
        if(l <= L && R <= r) return A[h];
        else{
            pushdown(h, L, R);
            if(r <= M) return Query(lc, l, r);
            else if(l > M) return Query(rc, l, r);
            else return Query(lc, l, r) + Query(rc, l, r);
        }
    }

}T;

void change(int u, int v, int val){
    while(top[u] != top[v]){
        if(dep[top[u]] < dep[top[v]]) swap(u, v);
        T.Modify(1, 1, n, id[top[u]], id[u], val);
        u = fa[top[u]];
    }
    if(dep[u] > dep[v]) swap(u, v);
    T.Modify(root, id[u], id[v], val);
}

int query(int u, int v){
    info l, r;
    l = r = (info){0, 0, 0};
    int x = u, y = v;
    while(top[x] != top[y]){
        if(dep[top[x]] < dep[top[y]]) y = fa[top[y]];
        else x = fa[top[x]];
    }
    while(u != x) l = T.Query(root, id[top[u]], id[u]) + l, u = fa[top[u]];
    while(v != y) r = T.Query(root, id[top[v]], id[v]) + r, v = fa[top[v]];
    if(dep[u] > dep[v]) return (l.rev() + T.Query(1, 1, n, id[v], id[u]).rev() + r).tot;
    else return (l.rev() + T.Query(root, id[u], id[v]) + r).tot;
}

int main(){
    scanf("%d%d", &n, &m);
    For(i,1,n) scanf("%d", &co[i]);
    For(i,2,n){
        int x, y;
        scanf("%d%d", &x, &y);
        G[x].push_back(y), G[y].push_back(x);
    }
    DFS1(1), DFS2(1);
    T.Create(1, 1, n);
    while(m--){
        char Q[3];
        int u, v, x;
        scanf("%s%d%d", Q, &u, &v);
        if(Q[0] == 'C') scanf("%d", &x), change(u, v, x);
        else printf("%d\n", query(u, v));
    }
    return 0;
}
【医学图像处理】X-ray成像之X射线的产生 【医学图像处理】X-ray成像之X射线的产生 概述 电流流过钨丝,并将其加热。 随着加热,增加的能量使电子能够通过热电子发射从灯丝中释放出来。 电子被吸引到带正电的阳极,并以由管电位(电压)确定的最大能量撞击钨靶。 当电子轰击目标时,它们通过轫致辐射和特有的相互作用将能量转换为热量(99%)和X射线光子(1%)。 X射线光子以一束能量(X射线光谱)从光束中释放出来,构成X射线图像形成的基础。 设备 阴极 灯丝 用细的(0.2毫米)钨丝制成,因为钨: 原子序数高(A 184,Z 74) 是良好的热 阅读详情

相关推荐

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战

本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。

weixin_42103128的博客 147

BZOJ - 2243: [SDOI2011]染色 树链剖分

2243: [SDOI2011]染色 Time Limit:20 SecMemory Limit:512 MBSubmit:10456Solved:4013[Submit][Status][Discuss] Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点...

diangan7073的博客 182

汇编语言与USB量产工具开发解析

本文解析了汇编语言在USB量产工具开发中的应用。USB量产工具主要用于批量配置USB设备,包括固件烧录、格式化、信息写入等功能。汇编语言在底层硬件操作中发挥关键作用,如直接控制USB寄存器、编写驱动和精确时序控制。文章通过伪代码示例展示了USB控制器初始化和固件烧录流程,并强调硬件依赖性、安全机制和时序精度等注意事项。开发需严格遵循芯片手册,建议优先使用厂商SDK,避免设备损坏风险。

RulesChen的博客 1024

洛谷 P2486 [SDOI2011]染色 树链剖分

洛谷 P2486 [SDOI2011]染色 题意 有一棵 nnn 个结点的无根树,每个结点有一个颜色,有 mmm 个操作,操作分两种: 将结点 aaa 到结点 bbb 路径上的所有结点颜色都染成 ccc 。 询问结点 aaa 到结点 bbb 路径上颜色段的数量。 颜色段的定义是极长的连续相同颜色被认为是一段。例如 112221 由三段组成:11、222、1。 解法 树链剖分 树上路径操作的修改与询问,考虑使用树链剖分。 维护区间内颜色段的数量,考虑使用线段树,维护区间内颜色段的数量和两端的颜色。区间

bandiaoz的博客 189

Code Ocean 上传代码 手把手教程

对于一些学术期刊,录用前会让把代码上传到Code Ocean上,但上传过程可能会遇到一些问题,小编分享一下自己的上传经验。他们会进行验证,验证通过,将自动发布。点此运行即可,但是运行比较慢。

u014071947的博客 1万+

Allegro PCB设计小技巧:如何用Shift键快速平移复制走线和过孔?

本文深入解析了Allegro PCB设计中利用Shift键进行平移复制的核心技巧。通过对比传统复制粘贴流程,详细演示了如何高效、精准地批量复制走线和过孔,尤其适用于创建等间距电源总线、过孔阵列等场景,能显著提升PCB设计效率与准确性。

pz89012345的博客 553

SDOI2011 染色 [树链剖分]

[SDOI2011]染色 题目描述 输入输出格式 输入格式: 输出格式: 对于每个询问操作,输出一行答案。 输入输出样例 输入样例#1: 6 5 2 2 1 2 1 1 1 2 1 3 2 4 2 5 2 6 Q 3 5 C 2 1 1 Q 3 5 C 5 1 2 Q 3 5 输出样例#1: 3 1 2 说明 题解 树链剖分进阶题,思路好懂,细节多,难调 树上修改一段区间的值...

weixin_30871293的博客 166

AD620单电源应变片测量电路分析

笔者最近在用AD620做应变片的压力检测电路,正好AD620的datasheet中有对于应变片压力测量的应用电路,参考该电路进行设计及实验后发现该电路存在些许问题,并对其进行了优化改进。本文纯属个人理解,供大家参考,欢迎批评指正。 AD620应用电路分析及优化 应用电路分析 AD620手册中原电路如下(加了部分标注以便分析): 该电路中,前半部分比较明显,为经典的AD620放大电路结构:四个应变...

拙诚电子工作室 1万+

洛谷 P2486 [SDOI2011]染色(线段树区间更新,树链剖分)

链接: 洛谷 P2486 [SDOI2011]染色 题目描述 输入格式 输出格式 对于每个询问操作,输出一行答案。 输入输出样例 输入 #1 6 5 2 2 1 2 1 1 1 2 1 3 2 4 2 5 2 6 Q 3 5 C 2 1 1 Q 3 5 C 5 1 2 Q 3 5 输出 #1 3 1 2 分析: 树上区间操作,首先进行树链剖分。 对于每一条链,线段树进行区间维护,对...

Plus Ultra! 338

ENVI与Sarscape协同处理哨兵一号数据的完整流程解析

本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。

weixin_29251131的博客 339

基于STM32设计的智能水母投喂器(华为云IOT)_170

本项目利用STM32单片机控制各种传感器和水泵等设备,能够自动检测和调整水温和水质等参数,自动换水,自动供氧等等,充分满足了水母的养殖要求和需要。同时,根据水母喜欢的光环境,添加了RGB氛围灯,以及可以手动控制的喂食器等功能,提升了水母养殖的便利性和趣味性。

8805

[SDOI2011]染色 【树链剖分】

[SDOI2011]染色 线段树部分还要带两个成员lc(该区间最左边的结点颜色)和rc(该区间最右边的结点颜色) ,其他应该都是裸的树链剖分 我被卡死是在询问的时候,最后top[u]==top[v]的时候,要判断两边的color和之前的两条链的顶端是不是一样(我把之前两条链的顶端记反了) 代码 #include #include #include #include #include #

zerollt的代码堆积地 243

三臂杆大型液压机械臂集中式ADRC控制系统设计

本文设计了一种用于三臂杆液压机械臂的集中式自抗扰控制(ADRC)系统。该系统通过建立包含惯性矩阵、科氏力、重力及摩擦力的非线性动力学模型,并集成液压系统传递函数,构建了完整的系统模型。控制方案采用跟踪微分器安排过渡过程,扩张状态观测器实时估计系统状态和总扰动,以及非线性状态误差反馈生成控制量。MATLAB实现展示了集中式ADRC控制器的核心结构,包括参数定义、跟踪微分器、扩张状态观测器和非线性反馈模块的设计。该系统能有效处理多关节耦合效应,实现三输入三输出的MIMO控制,具有抗干扰能力强、响应速度快的特点。

huanghm88的专栏 269

B20J_2243_[SDOI2011]染色_树链剖分+线段树

B20J_2243_[SDOI2011]染色_树链剖分+线段树 一下午净调这题了,争取晚上多做几道。 题意: 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 分析: 线段树结点...

97

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

[BZOJ2243][[SDOI2011]染色][树链剖分+线段树]

[BZOJ2243][[SDOI2011]染色][树链剖分+线段树]题目大意:给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。思路:树链剖分后在线段树上记录一下每个节点表示的区

羽裳 459

Devexpress16.2.6破解工具

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

BZOJ 2243: [SDOI2011]染色 [树链剖分]

2243: [SDOI2011]染色 Time Limit:20 SecMemory Limit:512 MBSubmit:6651Solved:2432[Submit][Status][Discuss] Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的...

weixin_30550271的博客 79

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

BZOJ 2243: [SDOI2011]染色 树链剖分+线段树

2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 7623  Solved: 2855 [Submit][Status][Discuss] Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上

BlackJack 628

bzoj2243: [SDOI2011]染色(树链剖分)

www.cnblogs.com/shaokele/ bzoj2243: [SDOI2011]染色   Time Limit: 20 Sec   Memory Limit: 512 MB Description   给定一棵有n个节点的无根树和m个操作,操作有2类:   1、将节点a到节点b路径上所有点都染成颜色c;   2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如...

weixin_30951389的博客 99

[SDOI2011][BZOJ2243] 染色|线段树|树链剖分

2243: [SDOI2011]染色 Time Limit:20 SecMemory Limit:512 MBSubmit:3583Solved:1362[Submit][Status][Discuss] Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的...

weixin_30682415的博客 184

【BZOJ2243】[SDOI2011]染色 树链剖分+线段树

【BZOJ2243】[SDOI2011]染色 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 Input 第一行包含2个整数n和...

weixin_30668887的博客 86

bzoj 2243: [SDOI2011]染色 (树链剖分+线段树)

2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 6693  Solved: 2459 [Submit][Status][Discuss] Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点

clover_hxy的博客 333

LVGL容器与布局实战:基于ESP32的Flex/Grid仪表盘UI开发

嵌入式图形界面开发中,UI布局的合理性直接决定了产品的交互体验与开发效率。传统通过绝对坐标逐个计算控件位置的方式,不仅代码冗余,也难以适应不同分辨率的屏幕。容器与布局机制的出现,让控件排列变得自动化:开发者只需定义父容器的排列规则,子控件即可按Flex或Grid方式自动对齐、换行和缩放。这种设计思路在ESP32等资源受限平台上尤为重要,能够在无GPU、仅靠软件渲染的条件下,实现流畅的自适应界面。本文以LVGL为切入点,系统讲解容器对象的创建与管理,结合Flex与Grid两种主流布局方式的API用法,并通过一

weixin_30780649的博客 325

BZOJ_2243 [SDOI2011]染色 【树链剖分+线段树】

一  题目   [SDOI2011]染色 二 分析   感觉树链剖分的这些题真的蛮考验码力的,自己的码力还是不够啊!o(╯□╰)o   还是比较常规的树链剖分,但是一定记得这里的线段树在查询的时候一定要考虑链于链相邻的两个点。   一开始自己已经把很多坑都已经注意了,包括颜色可以为0,链的相邻点,但怎么就是不正确,还是要多刷题。 三 AC代码 1 /*************...

weixin_30412577的博客 115

bzoj 2243 [SDOI2011]染色(树链剖分+线段树合并)

【bzoj2243】[SDOI2011]染色 2017年10月20日 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 ...

weixin_30295091的博客 126

Bzoj 2243: [SDOI2011]染色(树链剖分+线段树)

2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MB Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),...

weixin_30662109的博客 81

BZOJ 2243: [SDOI2011]染色 树链剖分+线段树区间合并

2243: [SDOI2011]染色 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 Input 第一行包含...

weixin_30511107的博客 108
上一篇: NOI 2014 魔法森林 LCT
下一篇: NOI 2015 品酒大会 后缀数组
dy0607
博客等级 码龄12年 16粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值