bzoj3083: 遥远的国度

WPF窗口定位技巧:从基础到高级的三种实现方法 本文详细解析WPF窗口定位的三种核心方法:屏幕居中(CenterScreen)、父窗口居中(CenterOwner)和手动定位(Manual)。通过对比其适用场景、实现代码与注意事项,帮助开发者根据实际需求选择最佳方案,从而提升WPF应用程序的用户体验与专业度。 阅读详情

题意:给定一棵树,支持换根,路径权值覆盖,求子树最小。

思路:求子树?上树链剖分,但是换根怎么办?我们只能通过原有信息推出换根后的答案。换根不影响路径修改,所以只要考虑子树最小值的维护。

这里要分3种情况讨论

1:如果询问点是当前根,直接返回整棵树的最小值。

2:如果在原树中,当前根不在x的子树中,直接返回原树中x的子树最小值。判断x在不在y的子树中,只要通过dfs序即可,如果x的dfs序大于y,且小于等于y子树中最后一个点的dfs序,那么x就在y的子树中。

3:如果在原树中,当前根在x的子树中,那么就相当于去掉当前根所在的x的儿子的子树的整棵树(语文没学好..具体见图..)

然后这题就解决了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ls (p<<1)
#define rs ((p<<1)|1)
#define mid ((l+r)>>1)
const int maxn=100010,maxm=200010,maxt=maxn<<3;
using namespace std;
int n,m,pre[maxm],now[maxn],son[maxm],col[maxn],tot,root;
int fa[maxn],hson[maxn],w[maxn],top[maxn],dep[maxn],size[maxn],T,q,z[maxn],cnt,def[maxn],a[maxn],op,last[maxn];
void add(int a,int b){pre[++tot]=now[a],now[a]=tot,son[tot]=b;}

struct tree{
	static const int inf=2147483647;
	int mins[maxt],cov[maxt];
	void update(int p){mins[p]=min(mins[ls],mins[rs]);}
	void down(int p){if (cov[p]) mins[ls]=mins[rs]=cov[ls]=cov[rs]=cov[p],cov[p]=0;}
	void build(int p,int l,int r){
		if (l==r){mins[p]=a[l];return;}
		build(ls,l,mid),build(rs,mid+1,r);
		update(p);
	}
	void change(int p,int l,int r,int a,int b,int v){
		if (l==a&&r==b){cov[p]=mins[p]=v;return;}
		down(p);
		if (b<=mid) change(ls,l,mid,a,b,v);
		else if (a>mid) change(rs,mid+1,r,a,b,v);
		else change(ls,l,mid,a,mid,v),change(rs,mid+1,r,mid+1,b,v);
		update(p);
	}
	int query(int p,int l,int r,int a,int b){
		if (a>b) return inf;
		if (l==a&&r==b){return mins[p];}
		down(p);
		if (b<=mid) return query(ls,l,mid,a,b);
		else if (a>mid) return query(rs,mid+1,r,a,b);
		else return min(query(ls,l,mid,a,mid),query(rs,mid+1,r,mid+1,b));
	}
}Seg;

void dfs(int x){
	size[x]=1;
	for (int y=now[x];y;y=pre[y])
		if (son[y]!=fa[x]){
			fa[son[y]]=x,dep[son[y]]=dep[x]+1,dfs(son[y]);
			size[x]+=size[son[y]];
			if (size[son[y]]>size[hson[x]]) hson[x]=son[y];
		}
}

void btree(int x,int tp){
	w[x]=++m,a[m]=def[x],top[x]=tp;
	if (hson[x]) btree(hson[x],top[x]);
	for (int y=now[x];y;y=pre[y])
		if (son[y]!=fa[x]&&hson[x]!=son[y])
			btree(son[y],son[y]);
	last[x]=m;
}
bool in(int root,int a){return w[a]>=w[root]&&w[a]<=last[root];}
void cover(int a,int b,int v){
	int f1=top[a],f2=top[b];
	while (f1!=f2){
		if (dep[f1]<dep[f2]) swap(f1,f2),swap(a,b);
		Seg.change(1,1,m,w[f1],w[a],v);
		a=fa[f1],f1=top[a];
	}
	if (dep[a]>dep[b]) swap(a,b);
	Seg.change(1,1,m,w[a],w[b],v);
}

void answer(int x){
	if (x==root) printf("%d\n",Seg.query(1,1,n,1,n));
	else if (!in(x,root)) printf("%d\n",Seg.query(1,1,n,w[x],last[x]));
	else for (int y=now[x];y;y=pre[y])
			if (in(son[y],root)&&son[y]!=fa[x]){
				printf("%d\n",min(Seg.query(1,1,n,1,w[son[y]]-1),Seg.query(1,1,n,last[son[y]]+1,n)));
				break;
			}
}

int main(){
//	freopen("country.in","r",stdin);freopen("country.out","w",stdout);
	scanf("%d%d",&n,&q);
	for (int i=1,a,b;i<n;i++) scanf("%d%d",&a,&b),add(a,b),add(b,a);
	for (int i=1;i<=n;i++) scanf("%d",&def[i]);
	scanf("%d",&root);
	dfs(root),btree(root,root);Seg.build(1,1,m);
	for (int i=1,a,b,c;i<=q;i++){
		scanf("%d",&op);
		if (op==1) scanf("%d",&a),root=a;
		else if (op==2) scanf("%d%d%d",&a,&b,&c),cover(a,b,c);
		else scanf("%d",&a),answer(a);
	}
//	fclose(stdout);
	return 0;
}


麒麟OS(Kylin OS)操作系统minikube+docker安装使用及遇到的问题 一 ,安装minikube及操作工具kubectl 1,安装kubectl 使用以下命令下载最新版本: curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 要下载指定版本(例如v1.22.0版本) ,请键入: curl -LO https://dl.k8s.io/release/v1.22.0/bin/linux/amd.. 阅读详情

相关推荐

Realsense D435i运行ORB-SLAM3

【代码】Realsense D435i运行ORB-SLAM3。

MAX_Hope的博客 2563

[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

Ansys Lumerical | 薄膜铌酸锂电光调制器的仿真与优化

本文详细介绍了使用Ansys Lumerical进行薄膜铌酸锂电光调制器仿真与优化的全流程。从基础原理到电学仿真、光学模拟技巧,再到设计优化实战经验,帮助工程师掌握这一先进光电器件的仿真方法。重点解析了薄膜铌酸锂的Pockels效应和Mach-Zehnder结构设计,并提供了常见问题排查指南和最新发展动态。

vulkan6gpu的博客 1196

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

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

远行客 262

阿里云百炼接入本地Claude,接入idea

阿里云百炼平台提供两种接入方式:未购买套餐时使用通用API Key(sk-xxxxx),需注意免费额度独立计算且不会自动切换模型;购买Coding Plan套餐后使用专属API Key(sk-sp-xxxxx),享受固定月费无超支风险。配置需在.claude/settings.json中设置认证信息,包括API Key和Base URL。建议开启"用完即停"功能避免意外扣费,不同模型的免费额度互不影响。购买套餐后还可通过IDEA插件Claude Code进行集成,实现固定费用下的稳定使用

fengtangjiang的博客 1356

【js逆向学习】新手视角破解「广东省公共资源交易平台」

学习js逆向,破解广东省公共资源交易平台,详细记录个人探索、踩坑全过程。网站地址: aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=仅供学习参考,如有疑问欢迎交流,一起学习进步。

DCSDA的博客 3315

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

题目:bzoj3083. 题目大意:维护一个数据结构,在树上支持: 1.格式1x1 x1x,表示将根换成xxx. 2.格式2xyz2 x y z2xyz,表示将xxx到yyy的路径上的节点的权值都修改为z. 3.格式3x3 x3x,表示询问以xxx为根的子树的点权最小值. 那么这道题我们假设没有换根这种操作,就会十分简单,一个裸的树剖. 但是有换根操作怎么办? 我们可以很容易的得出一个结论,根是哪...

hzk_cpp的博客 392

RK3566基于Buildroot定制QT开发环境的完整指南

本文详细介绍了如何在RK3566开发板上使用Buildroot定制QT开发环境的完整流程。从基础环境搭建、Buildroot初始配置到QT模块选择与编译验证,提供了实战经验和常见问题解决方案,帮助开发者高效完成嵌入式Linux下的QT开发环境部署。

weixin_26804345的博客 358

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

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

Master.Yi的博客 230

MRST开源油藏模拟:从入门到精通的全流程指南

本文全面介绍了MRST开源油藏模拟工具的使用方法,从环境搭建到核心功能实战,再到性能优化和工业级应用。MRST作为一款基于MATLAB的开源工具,为油藏工程师提供了强大的数值模拟能力,特别适合教学和科研场景。文章还分享了二次开发技巧和常见问题解决方案,帮助读者快速掌握油藏模拟技术。

beer8的博客 326

多出来的那一截:Java 堆外内存 OOM 的来源分账、分流排查与治理解析

Java进程的RES常比-Xmx多出一截,堆却平稳。本文把堆外内存拆成直接缓冲区、Unsafe、JNI本地库、线程栈、元空间与文件映射六类,用JDK 8与17的六组实验对照RSS、NMT、BufferPool三本账:clear()不释放内存;MaxDirectMemorySize默认约等于堆上限且只管直接缓冲区;禁用显式GC会让申请线程退避半秒后失败;未关闭的Deflater零GC下让RSS涨1GB;Netty池内泄漏GC救不回。最后给出定性、对账、定位的排查路线与预算、编码、监控三层治理。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 14万+

[BZOJ]3083: 遥远的国度

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

weixin_30642869的博客 146

【技能】OpenClaw Skills学习及手搓一个极简skill

本文介绍了OpenClaw Skills的基础概念与使用方法。Skills是OpenClaw代理使用工具的核心载体,通过SKILL.md文件定义技能属性和执行方式。技能加载遵循"工作区>本地>内置>自定义目录"的优先级规则。用户可通过ClawHub一键安装现成技能,也可自定义开发技能:创建技能目录,编写包含YAML元数据和执行指令的SKILL.md文件,放置于工作区skills目录进行测试。文章还介绍了多代理场景下的技能共享、插件集成以及安全注意事项,包括沙箱使用和敏感

海兰 3975

BZOJ3083: 遥远的国度

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

weixin_30732487的博客 125

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

bzoj 3083: 遥远的国度

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

weixin_30527143的博客 69

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

*BZOJ3083: 遥远的国度

$n \leq 1e5$的树,$m \leq 1e5$个操作:链加;换根;查子树最值。 链剖:随便选个根,换根就记一下现在根。查子树最值时,只有原来的根到现在根这段的子树信息是怪怪的,但也只是挑掉一段子树而已,相当于查dfs序中前缀和后缀的最值。 LCT:不大会。。 转载于:https://www.cnblogs.com/Blue233333/p/8922193.html...

a2850363633的博客 116

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

首先,如果没有换根操作的话,那么这就是一个普通的树链剖分。 先按照以1为根进行树链剖分,用线段树维护最小值。现在考虑换根操作,设当前根为root,查询的子树根节点为想,会发现有如下三种情况: \( root=x \),相当于求全区间和,直接返回即可; x在root的子树中,那么换根对它没有影响,直接当做没有换根来查询即可; x不在root的子树中,那么答案为全区间和减去x下面root所在的子树的...

weixin_30470857的博客 120
上一篇: bzoj2594: [Wc2006]水管局长数据加强版
下一篇: bzoj2631: tree
thy_asdf
博客等级 码龄12年 16粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值