BZOJ3083 遥远的国度题解(树链剖分+分类讨论)

三菱FX5U通信之CCLINK操作步骤 11. 连接 CC‐Link 用的端子排,连接 Ver.1.10 对应 CC‐Link 专用电缆。备注:1、以上对应的寄存器都是一一对应的,主站的点数可以比从站多,但是都需要一一对应起来。3.直接安装孔,用于直接安装的螺钉孔(2‐φ4.5,安装螺钉为 M4 螺钉)2.点阵 LED(显示模块中设置的站号和测试模式的内容)5.次段扩展连接器(连接扩展模块的扩展电缆的连接器)4.动作状态(显示 LED 显示模块的动作状态)10 电源连接器,用于连接电源电缆的连接器。1.扩展电缆(扩展时连接用的电缆) 阅读详情

题目:BZOJ3083.
题目大意:维护一个数据结构,在一棵 n n n个点的树上支持:
1.格式 1 x 1 x 1x,表示将根换成 x x x.
2.格式 2 x y z 2 x y z 2xyz,表示将 x x x到 y y y的路径上的节点的权值都修改为z.
3.格式 3 x 3 x 3x,表示询问以 x x x为根的子树的点权最小值.
设操作次数为 m m m,则 1 ≤ n , m ≤ 1 0 5 1\leq n,m\leq 10^5 1≤n,m≤105.

那么这道题我们假设没有换根这种操作,就会十分简单,一个裸的树剖.

但是有换根操作怎么办?

我们可以很容易的得出一个结论,根是哪一个跟链的关系并不大,树的结构也不会变,但是节点的父子关系会变,也就是说子树查询受到了一定的影响.

我们可以画一张图看看(节点上标的数字不是编号,是权值):
在这里插入图片描述
图画的丑不要介意.

这张图中,我们可以发现,只有原根和新根之间的这条链的子树发生了改变,而别的节点的子树都没有发生改变.

所以我们可以分类讨论,若不是在这条链之间的节点,我们直接返回子树的最小值.

若是这条链上的节点,则分成两类讨论:
1.若当前根是询问节点,直接返回这棵树的最小值.
2.若询问节点是当前根的祖先,可以发现,本来在这条链上父亲-儿子的关系发生了逆转变成了儿子-父亲的关系,也就是说现在这个点要查询的最小值范围应该是整棵树去掉这个儿子子树的那部分.

那么这个儿子的范围该怎么求?

我们可以确定这条链,那按照这条链不断往上跳,直到跳到的点的父亲是当前这个点.但是这样时间复杂度没有保证怎么办?

一个可行的方案是记录一个倍增数组,然后用倍增LCA的方式找到这个儿子.

另一个问题:怎么判断 x x x是否在莫条链上?

我们可以肯定的一点是,若 x x x和当前根的LCA是 x x x的话,那么 x x x肯定在这条链上.

那么这道题就很简单了:

#include<bits/stdc++.h>
  using namespace std;
#define Abigail inline void
typedef long long LL;
const int N=100000;
const int C=20;
const int INF=2147213647;
struct side{
 int y,next;
}e[N*2+9];
struct tree{
  int l,r,min,tag;
}tr[N*5+9];
struct node{
  int deep,dfn,size,son,top,dad,v,grand[C+1],low;
}nod[N+9];
int now,n,m,lin[N+9],top,t,order[N+9];
Abigail ins(int X,int Y){
  e[++top].y=Y;
  e[top].next=lin[X];
  lin[X]=top;
}
void dfs1(int k,int fa){
  nod[k].dad=fa;
  nod[k].deep=nod[fa].deep+1;
  nod[k].grand[0]=fa;
  nod[k].size=1;
  for (int i=1;i<=C&&nod[k].grand[i-1];i++)
    nod[k].grand[i]=nod[nod[k].grand[i-1]].grand[i-1];
  for (int i=lin[k];i;i=e[i].next)
    if (fa^e[i].y){
      dfs1(e[i].y,k);
      nod[k].size+=nod[e[i].y].size;
      if (nod[nod[k].son].size<nod[e[i].y].size) nod[k].son=e[i].y;
    }
}
void dfs2(int k,int start){
  nod[k].dfn=++t;
  order[t]=k;
  nod[k].top=start;
  if (nod[k].son) dfs2(nod[k].son,start);
  for (int i=lin[k];i;i=e[i].next)
    if (e[i].y^nod[k].dad&&e[i].y^nod[k].son) dfs2(e[i].y,e[i].y);
  nod[k].low=t;
}
void pushup(int k){
  tr[k].min=min(tr[k<<1].min,tr[k<<1|1].min);
}
void pushdown(int k){
  if (!tr[k].tag) return;
  int ls=k<<1,rs=k<<1|1;
  tr[ls].tag=tr[rs].tag=tr[ls].min=tr[rs].min=tr[k].tag;
  tr[k].tag=0;
}
void build(int L,int R,int k=1){
  tr[k].l=L;tr[k].r=R;
  if (L==R){
    tr[k].min=nod[order[L]].v;
    return;
  }
  int mid=L+R>>1;
  build(L,mid,k<<1),build(mid+1,R,k<<1|1);
  pushup(k);
}
void change(int L,int R,int num,int k=1){
  if (L==tr[k].l&&R==tr[k].r){
    tr[k].min=num;
    tr[k].tag=num;
    return;
  }
  pushdown(k);
  int mid=tr[k].l+tr[k].r>>1;
  if (R<=mid) change(L,R,num,k<<1);
  else if (L>mid) change(L,R,num,k<<1|1);
    else change(L,mid,num,k<<1),change(mid+1,R,num,k<<1|1);
  pushup(k);
}
int query(int L,int R,int k=1){
  if (L==tr[k].l&&R==tr[k].r) return tr[k].min;
  pushdown(k);
  int mid=tr[k].l+tr[k].r>>1;
  if (R<=mid) return query(L,R,k<<1);
  else if (L>mid) return query(L,R,k<<1|1);
    else return min(query(L,mid,k<<1),query(mid+1,R,k<<1|1));
}
void Change(int u,int v,int num){
  while (nod[u].top^nod[v].top){
    if (nod[nod[u].top].deep<nod[nod[v].top].deep) swap(u,v);
    change(nod[nod[u].top].dfn,nod[u].dfn,num);
    u=nod[nod[u].top].dad;
  }
  if (nod[u].deep>nod[v].deep) swap(u,v);
  change(nod[u].dfn,nod[v].dfn,num);
}
int LCA(int u,int v){
  while (nod[u].top^nod[v].top)
    if (nod[nod[u].top].deep>nod[nod[v].top].deep) u=nod[nod[u].top].dad;
    else v=nod[nod[v].top].dad;
  return nod[u].deep<nod[v].deep?u:v;
}
int Query(int x){
  if (x==now) return tr[1].min;
  if (LCA(now,x)^x) return query(nod[x].dfn,nod[x].low);
  int u=now,mi=INF,depth=nod[u].deep-nod[x].deep-1;
  for (int i=C;i>=0;i--)      //这种地方不要贪图方便把i>=0写成i,不然会死的很惨
    if (depth&1<<i) u=nod[u].grand[i];
  if (nod[u].dfn>1) mi=min(mi,query(1,nod[u].dfn-1));
  if (nod[u].low<n) mi=min(mi,query(nod[u].low+1,n));
  return mi;
}
Abigail into(){
  scanf("%d%d",&n,&m);
  int x,y;
  for (int i=1;i<n;i++){
    scanf("%d%d",&x,&y);
    ins(x,y);ins(y,x);
  }
  for (int i=1;i<=n;i++)
    scanf("%d",&nod[i].v);
  scanf("%d",&now);
}
Abigail work(){
  dfs1(now,0);
  dfs2(now,now);
  build(1,n);
  int opt,x,y,v;
  for (int i=1;i<=m;i++){
    scanf("%d",&opt);
    switch (opt){
      case 1:scanf("%d",&now);
             break;
      case 2:scanf("%d%d%d",&x,&y,&v);
             Change(x,y,v);
             break;
      case 3:scanf("%d",&x);
             printf("%d\n",Query(x));
             break;
    }
  }
}
Abigail outo(){
}
int main(){
  into();
  work();
  outo();
  return 0;
}
SAP特殊库存全解析:供应商寄售、客户寄售、分包与项目库存说明 客户寄售库存(Customer Consignment)是企业将物料存放于客户处,客户实际领用后才确认销售收入。这种模式能缩短交货周期、提高客户满意度,但需严格跟踪寄售库存的数量与状态。 阅读详情

相关推荐

Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿

本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。

weixin_33737134的博客 615

【BZOJ3083】遥远的国度 题解

题面:传送门 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;链上修改,子树查询,一看就是树链剖分,链修改不需要说了吧,查询xxx的子树只需要查询[posx,posx+sizex−1][posx,posx+sizex−1][pos_x,pos_x+size_x-1]即可。 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;最难的也是最最关键的地方就是换根操作了。稍稍想一想就知

蒟 346

从网口变压器到TVS管:手把手设计通过4KV浪涌的以太网电路

本文详细解析工业级以太网接口4KV浪涌防护设计,从网口变压器选型到TVS管布局,提供通过IEC61000-4-5标准测试的完整方案。重点介绍Bob Smith电路优化和PCB设计技巧,帮助工程师有效应对雷电感应和设备开关瞬态干扰,确保工业设备稳定运行。

study的专栏 283

bzoj3083: 遥远的国度

题目 Solution 1.x==rootx==rootx==root,查询整棵树。 2.lca(root,x)!=xlca(root,x)!=xlca(root,x)!=x,查询xxx的子树 3.lca(root,x)==xlca(root,x)==xlca(root,x)==x,查询与xxx相邻的节点中与rootrootroot最近的点vvv在整棵树中的补集 注意:既然这题是树剖,那还打什么倍...

xumingyang0的博客 234

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新,怪我太懒啦~~~ 今天要特别感谢舒仔仔同学,我的好队友帮我写了这篇博文。这篇文章主要讲了如何通过mavros来控制pixhawk。硬件逻辑是这样子,我们先搞一个odroid(土豪上TX2),再用usb线将odroid与pixhawk连接。所以,odroid发送控制指令来控制pixhawk飞行。pixhawk与外界的通信协议是mavlink。ROS下面有个包叫mavr...

zhengyuxin0507的博客 1万+

基于OpenCV C++实现工业级形状模板匹配:仿Halcon SBM算法全解析

在计算机视觉和工业自动化领域,模板匹配是一项基础且关键的技术,用于在图像中定位已知目标。其核心原理是通过计算图像区域与预设模板之间的相似度来识别目标位置。传统的基于灰度值的匹配方法对光照变化敏感,鲁棒性不足。而基于边缘梯度方向的形状匹配技术,通过计算轮廓梯度方向的一致性进行相似度度量,从根本上提升了对光照变化的鲁棒性,并支持目标的旋转与缩放,技术价值显著。这项技术广泛应用于工业视觉检测、机器人引导、PCB定位等对精度和稳定性要求极高的场景。本文聚焦于使用开源OpenCV库,从底层仿照Halcon的Shape

weixin_33691817的博客 500

[bzoj3083]遥远的国度

3083: 遥远的国度Time Limit: 10 Sec Memory Limit: 1280 MB Submit: 1733 Solved: 429 [Submit][Status][Discuss] Description描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn

Vampire 710

视觉Transformer实战 | Token-to-Token Vision Transformer(T2T-ViT)详解与实现

Vision Transformer (ViT) 在计算机视觉领域取得了巨大成功,但标准的 ViT 存在一些局限性,如需要大规模预训练数据、对局部结构建模不足等。Token-to-Token ViT (T2T-ViT) 通过引入渐进式分词过程改进了原始 ViT,使其能够在中小型数据集上取得更好的性能。本节将详细介绍 T2T-ViT 的技术原理,并使用 PyTorch 从零开始实现 T2T-ViT。

盼小辉丶的博客 4万+

【BZOJ】3083: 遥远的国度 -树剖&线段树

传送门:bzoj3083 题解 这篇题解,必须要写(这道简单题真的坑到我了)…好久没打树剖的下场。 除开换根都是裸树剖+线段树。 以1号节点为根建树。换根可以O(1)O(1)O(1)换,只需要在查询的时候讨论一下: 若当前查询的节点ididid不在1到rootrootroot的路径上,直接查询子树信息(dfsdfsdfs序上的in,outin,outin,out)。 反之,当前以idi...

远行客 262

液态神经网络(LNN):打破AI“静态快照”的连续动力学革命---AI大模型系统从零开始0029

MIT研究团队受秀丽隐杆线虫神经系统的启发,开发出革命性的液态神经网络(LNN)。该技术通过连续微分方程建模神经元动态,实现输入响应速度的自适应调节,解决了传统AI模型静态化、高能耗和低解释性的痛点。LNN具有三大突破性优势:仅需少量神经元(如20个)即可完成复杂任务;能处理非均匀时序数据;在自动驾驶、医疗监测等领域展现出卓越的适应性和鲁棒性。这项将生物智能与数学建模完美融合的技术,有望成为下一代AI的核心架构,目前已在无人机导航等场景验证了其高效性,被预测为2026年最具潜力的AI突破方向。

添柴程序猿的专栏 372

SAP 未清PO数量 = 采购订单数量 - 已收货数量

本文介绍了SAP系统中查询未清PO数量的6种方法:1.标准采购报表(ME2L/ME2M/ME2N)适合业务用户快速查询;2.物料需求报表(MD04)可查看单个物料的供需情况;3.SQVI快速查询器提供自定义字段的灵活性;4.ABAP报表适合开发人员处理复杂逻辑;5.SAPQuery经配置后可供业务用户使用;6.BI/HANA方案适合大数据量分析。每种方法各有优缺点,用户可根据自身技术水平和具体需求选择,日常查询推荐使用标准采购报表ME2L/ME2M。

金牌架构师 1851

BZOJ3083: 遥远的国度【树链剖分】

题目描述: 问题是这样的:遥远的国度有n个城市,这些城市构成了一颗树。 这个国度有一个首都,我们可以把这个首都看做整棵树的根,首都是随时有可能变为另外一个城市的。 遥远的国度的每个城市有一个防御值,有些时候RapiD会使得某两个城市之间的路径上的所有城市的防御值都变为某个值。 RapiD想知道在某个时候,如果把首都看做整棵树的根的话,那么以某个城市为根的子树的所有城市的防御值最小是多少。 由于Ra...

Master.Yi的博客 230

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

bzoj3083 遥远的国度

Description描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀。问题是这样的:遥远的国度有n个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个国度有一个首都,我们可以把这个首都看做整棵树的根,

wumingshi 818

数学建模模型总结

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

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

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

【BZOJ3083/3306】遥远的国度/树 树链剖分+线段树

【BZOJ3083】遥远的国度 Description 描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀。 问题是这样的:遥远的国度有n个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个国度有...

aodanchui1057的博客 107

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

BZOJ 3083 遥远的国度 树链剖分 线段树

线段树 树链剖分 BZOJ 水题 遥远的国度

独立团团长李云龙 515

bzoj 3083 遥远的国度

3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MB Submit: 2118  Solved: 516 [Submit][Status][Discuss] Description 描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了z

clover_hxy的博客 1039

BZOJ 3083 遥远的国度 (树链剖分 + 换根讨论)

Description zcwwzdjn 在追杀 zhx ,而 zhx 逃入了一个遥远的国度。当 zcwwzdjn 准备进入遥远的国度继续追杀时,守护神 RapiD 阻拦了 zcwwzdjn 的去路,他需要 zcwwzdjn 完成任务后才能进入遥远的国度继续追杀。 问题是这样的:遥远的国度有 nnn 个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个国度有一个首都,我们可以把这个首都看做整棵树的根,但遥远的国度比较奇怪,首都是随时有可能变为另外一个城市的。遥远的国度的每个城市有一个防御值,第 ii

chr1stopher 303

[luogu3979][bzoj3083]遥远的国度

【luogu传送门】 【bzoj传送门】 题目描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀。 问题是这样的:遥远的国度有n个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个国度有一个首都,我们可以...

weixin_30830327的博客 129

[BZOJ]3083: 遥远的国度

题解: 方法一 我们采用树链剖分+线段树的做法 对于操作2,3都是基本的树剖操作 唯一不同的是换根 对于换根我们分情况讨论 若查询的节点是当前根的lca节点 那么查询的是查询节点在根-节点路径上的儿子节点的子树的补集 (可以手画一下 若查询的节点不是lca那么直接查询原树的子树范围 若查询的节点是当前根 则查询整颗子树 都是树剖基本操作 #include <a...

weixin_30642869的博客 146

BZOJ-3083 遥远的国度 树链剖分+分类讨论 or DFS序

3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MB Submit: 2165 Solved: 525 [Submit][Status][Discuss]Description 描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzd

DaD3zZ , To be a Beyonder! 919

【bzoj3083】 遥远的国度

比较难想的一道链剖(其实就是不那么裸的一道链剖),看来我这个zz只会刷裸题

zhaoyh2000的博客 450

【bzoj3083】【遥远的国度】【树链剖分】

Description 描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀。 问题是这样的:遥远的国度有n个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个国度有一个首都,我们可以把这个首都看做整棵树的

sunshinezff的专栏 622

BZOJ3083 遥远的国度 (树链剖分 换根子树求min)

题意 传送门 题解 除去树剖模板,问题就是换根。写LCT?要维护子树信息比较麻烦。 树剖仍然可以做。 我们还是按111为根树剖。对于询问分一下类,假设当前点为uuu,根为rtrtrt: u=rtu=rtu=rt,直接询问整棵树。 rtrtrt不在uuu子树内,则uuu在以rtrtrt为根时的子树和以111为根时的子树相同,直接查询子树。 rtrtrt在uuu子树内,那么一定可以找到uuu的儿子v...

Ark 254

[BZOJ3083]遥远的国度(树链剖分+dfs序)

因为今天是植树节,所以我们要剖树 题目: 我是超链接 题解: 可以发现除了这个换根操作之外别的全是裸树剖+dfs序维护子树 换根的情况怎么办呢?我们可以分类讨论一下,假如说这次要查询x的子树 root=x,那么查询的范围是整棵树 root不在x的子树里,那么对x的查询范围并没有什么影响,还是in~out root在x的子树里,那么需要查询的部分是除了通往root这一支之外的最小值...

薇小薇 421
上一篇: Codeforces 235 E Number Challenge 题解(Mobius反演)
下一篇: BZOJ4502 串题解(AC自动机)
hezlik
博客等级 码龄9年 111粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值