[TJOI2015] 旅游

手把手拆解UCIe协议层:从Raw Mode到Flit Mode,数据包到底经历了什么? 本文深入解析UCIe协议层的数据包处理机制,从Raw Mode到Flit Mode的三大变体(Standard 256B、68B-Enhanced、Latency-Optimized),详细揭示数据包在不同模式下的封装与转换过程。通过工程师视角,展示协议层如何实现多模式动态切换、错误恢复及与D2D Adapter的协同设计,为芯片级互连技术提供实践指导。 阅读详情

本来想水题的

开始以为就是一个区间维护最大值和最小值

结果开开心心的打了200行程序,一测样例,过不去

为什么呢?因为他要先买到宝石才能卖掉啊

所以白打了200行吗qwq

树剖的做法是显然的,线段树维护也是显然的

但是不能光维护最大值和最小值了

我们需要找一个 a a a和 b b b使 a a a在 b b b左边(形象的解释),让 v a l a − v a l b val_a-val_b vala​−valb​最大

怎么办呢?暴力找吗

我们需要维护这些东西

1.区间最小值

2.区间最大值

3.区间从左边走到右边能够获得的最大利润

4.区间从右边走到左边能够获得的最大利润

为什么要分开维护3,4呢?因为我们能够发现,我们从不同方向走同一段路得到的答案显然是不一样的

对于这种返回值比较多的东西,我们可以通过结构体返回来实现

其实这种题型也不少,比如说GSS7 染色
都是这样的题

简单贴下合并答案的代码(这里我图省事没有新建结构体,直接用的线段树的结构体)

segment_tree merge(segment_tree l,segment_tree r){
	segment_tree res;
	res._max=max(l._max,r._max);
	res._min=min(l._min,r._min);
	res.lmax=max(l._max-r._min,max(l.lmax,r.lmax));
	res.rmax=max(r._max-l._min,max(l.rmax,r.rmax));
	return res;
}

然后就很简单啦,我为了图省事,就在原来写的代码上改了改,于是成功的让我花了两个小时去debug…

如果当时重构代码的话估计还快一点qwq

树剖这种大码量的题还是要注意细节问题,比如说l,r有没有写反之类的

我就是最后询问的时候一个地方把r写成了l样例死活过不去

记得最后把l的左右swap一下

话说我感觉我左右写反了,为啥我要输出rmax呢qaq

code(我知道你们只看这个):

# include <bits/stdc++.h>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)
# define debug puts("QAQ");

typedef long long ll;
const int N=1e5+5;
const int mod=1e9+7;
const double eps=1e-7;

template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

int n,q;
int head[N],cnt;
int faz[N],son[N],dep[N],siz[N],top[N],dfn[N],tot;
int a[N],_a[N];

struct Edge{
	int to,next;	
}e[N<<1];

void add(int x,int y){
	e[++cnt]=(Edge){y,head[x]},head[x]=cnt;	
}

struct segment_tree{
	int l,r;
	int _max,_min;
	int lmax,rmax;	
	int tag;
	segment_tree(){l=r=_max=_min=tag=0;lmax=rmax=0;}
	bool operator == (const segment_tree &cmp)const{
		return l==cmp.l&&r==cmp.r&&_max==cmp._max&&_min==cmp._min&&lmax==cmp.lmax&&rmax==cmp.rmax&&tag==cmp.tag;	
	}
}seg[N<<2];

# define lc (u<<1)
# define rc (u<<1|1)

void pushup(int u){
	seg[u]._max=max(seg[lc]._max,seg[rc]._max);
	seg[u]._min=min(seg[lc]._min,seg[rc]._min);
	seg[u].lmax=max(seg[lc]._max-seg[rc]._min,max(seg[lc].lmax,seg[rc].lmax));
	seg[u].rmax=max(seg[rc]._max-seg[lc]._min,max(seg[lc].rmax,seg[rc].rmax));
}

void pushdown(int u){
	seg[lc]._max+=seg[u].tag,seg[lc]._min+=seg[u].tag;
	seg[rc]._max+=seg[u].tag,seg[rc]._min+=seg[u].tag;
	seg[lc].tag+=seg[u].tag,seg[rc].tag+=seg[u].tag;
	seg[u].tag=0;	
}

segment_tree merge(segment_tree l,segment_tree r){
	segment_tree res;
	res._max=max(l._max,r._max);
	res._min=min(l._min,r._min);
	res.lmax=max(l._max-r._min,max(l.lmax,r.lmax));
	res.rmax=max(r._max-l._min,max(l.rmax,r.rmax));
	return res;
}

void build(int u,int l,int r){
	seg[u].l=l,seg[u].r=r;
	if(l==r){
		seg[u]._max=_a[l],seg[u]._min=_a[l];
		return;
	}
	int mid=l+r>>1;
	build(lc,l,mid);
	build(rc,mid+1,r);
	pushup(u);
}

void update(int u,int l,int r,int k){
	if(seg[u].l>=l&&seg[u].r<=r){
		seg[u]._max+=k,seg[u]._min+=k;
		seg[u].tag+=k;
		return;
	}
	if(seg[u].tag)pushdown(u);
	int mid=seg[u].l+seg[u].r>>1;
	if(l<=mid)update(lc,l,r,k);
	if(r>mid)update(rc,l,r,k);
	pushup(u);
}

segment_tree query(int u,int l,int r){
	if(seg[u].l>=l&&seg[u].r<=r)return seg[u];
	if(seg[u].tag)pushdown(u);
	int mid=seg[u].l+seg[u].r>>1;
	if(r<=mid)return query(lc,l,r);
	if(l>mid)return query(rc,l,r);
	return merge(query(lc,l,r),query(rc,l,r)); 	
}

void RouteModify(int x,int y,int k){
	while(top[x]!=top[y]){
		if(dep[top[x]]<dep[top[y]])swap(x,y);
		update(1,dfn[top[x]],dfn[x],k);
		x=faz[top[x]];
	}
	if(dep[x]>dep[y])swap(x,y);
	update(1,dfn[x],dfn[y],k);
}

int RouteQuery(int x,int y){
	segment_tree l,r;
	l._min=r._min=2e9;
	while(top[x]!=top[y]){
		if(dep[top[x]]<dep[top[y]]){
			r=merge(query(1,dfn[top[y]],dfn[y]),r);
			y=faz[top[y]];	
		}
		else{
			l=merge(query(1,dfn[top[x]],dfn[x]),l);
			x=faz[top[x]];	
		}
	}
	if(dep[x]>dep[y])l=merge(query(1,dfn[y],dfn[x]),l);
	else r=merge(query(1,dfn[x],dfn[y]),r);
	swap(l.lmax,l.rmax);
//	printf("%d %d %d %d\n",r._max,r._min,r.lmax,r.rmax);
	return merge(l,r).rmax;
}

void dfs1(int u,int fa){
	faz[u]=fa;
	siz[u]=1;
	dep[u]=dep[fa]+1;
	RepG(i,u){
		int v=e[i].to;
		if(v==fa)continue;
		dfs1(v,u);
		siz[u]+=siz[v];
		if(siz[v]>siz[son[u]])son[u]=v;
	}
}

void dfs2(int u,int _top){
	top[u]=_top;
	dfn[u]=++tot;
	_a[tot]=a[u];
	if(!son[u])return;
	dfs2(son[u],_top);
	RepG(i,u){
		int v=e[i].to;
		if(v==faz[u]||v==son[u])continue;
		dfs2(v,v);
	}
}

int main()
{
	memset(head,-1,sizeof(head));
	read(n);
	Rep(i,1,n)read(a[i]);
	Rep(i,1,n-1){
		int x,y;
		read(x),read(y);
		add(x,y),add(y,x);
	}
	dfs1(1,0),dfs2(1,1);
	build(1,1,n);
	read(q);
	while(q--){
		int x,y,c;
		read(x),read(y),read(c);
		printf("%d\n",RouteQuery(x,y));
		RouteModify(x,y,c);	
	}
	return 0;
}
R语言广义加型模型(GAM)的运用例子及实现教程 一旦拟合了广义加型模型,我们可以查看模型摘要和诊断,以评估模型的质量和拟合情况。# 查看模型摘要响应变量:mpg(汽车的燃油效率)拟合函数:mpg ~ s(hp) + s(wt) 阅读详情

相关推荐

centos7部署mysql8.0.35,主从复制,主主集群

centos7 linux部署mysql,主从复制,主主模式

zaixiaqin的博客 1989

[TJOI2015]旅游-题解

【[TJOI2015]旅游-题目地址】 题目大意: 给定一棵树,每次询问从a走到b,选择这条路上的两个城市c,d,且c在d的前面(按照a→ba\rightarrow ba→b所经过的先后顺序)pd−pcp_d-p_cpd​−pc​的值最大,求这个最大值,并且要求维护链上修改。 显然可以用LCT做,但是树又不是动态的,所以我们考虑用树链剖分做。 我们对于一条路径a→ba\rightarrow ba...

TimeTraveller-VictoryCzt 403

CAN总线BusOff恢复机制详解:快慢恢复策略在车载网络中的实战应用

本文深入解析了CAN总线BusOff恢复机制,重点阐述了快慢恢复策略在车载网络中的工程应用。通过对比NXP S32K与STM32平台的实现代码,并结合CANoe仿真与参数优化方法,为工程师提供了从理论到实战的完整解决方案,旨在提升车载网络的可靠性与功能安全。

7up55的博客 613

[TJOI2015]旅游

问题描述 为了提高智商,ZJY准备去往一个新世界去旅游。这个世界的城市布局像一棵树。每两座城市之间只有一条路径可以互达。每座城市都有一种宝石,有一定的价格。ZJY为了赚取最高利益,她会选择从A城市买入再转手卖到B城市。由于ZJY买宝石时经常卖萌,因而凡是ZJY路过的城市,这座城市的宝石价格会上涨。让我们来算算ZJY旅游完之后能够赚取的最大利润。(如a城市宝石价格为v,则ZJY出售价格也为v) ...

include / Hdhd 304

《计算机网络》课程大作业- 《小区局域网的设计和规划》

8.1首先,在满足用户需求方面,通过详细的需求分析,充分考虑了居民和物业管理的不同业务需求。对于居民,无论是日常的高清视频播放、在线游戏、远程办公还是智能家居设备的连接,网络都能提供稳定的高速带宽支持。从有线网络的千兆以太网技术保障稳定的有线连接,到无线网络采用 Wi - Fi 6 技术确保无线覆盖区域的高速和低延迟,满足了居民多样化的娱乐和生活需求。对于物业管理,安防监控系统的实时数据传输、物业办公自动化系统的流畅运行以及社区信息的及时发布等业务,都有针对性的网络设计。

lisangsimida的博客 2598

【R语言-生存分析之观察生存率计算】

全人群肿瘤登记资料常用的统计分析指标包括发病率、死亡率、现患率以及生存率等,其中肿瘤生存率是评估肿瘤治疗效果和肿瘤负担的必要指标,其计算涉及肿瘤患者的发病、 死亡和随访三个方面的资料, 数据整理和计算过程均较为复杂, 如何及时、 准确地计算肿瘤生存率, 并使其可以在不同地区、 不同人群、不同时期间被客观公正地比较和评价,仍然是统计学家们一直在研究的主题。

weixin_46579654的博客 5439

bzoj 3999: [TJOI2015]旅游(树链剖分)

3999: [TJOI2015]旅游 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 423  Solved: 214 [Submit][Status][Discuss] Description 为了提高智商,ZJY准备去往一个新世界去旅游。这个世界的城市布局像一棵树。每两座城市之间只有一条路径可 以互达。每座城市都有一种宝石,有一

clover_hxy的博客 1696

Debian 12 安装nodejs(包括node、npm、npx、yarn、pnpm、cnpm、bun)

【代码】Debian 12 安装nodejs。

mirana的专栏 7999

【TJOI2015】旅游

时间限制 : 1000 MS 空间限制 : 256 MB 问题描述 为了提高智商,ZJY准备去往一个新世界去旅游。这个世界的城市布局像一棵树。每两座城市之间只有一条路径可以互达。每座城市都有一种宝石,有一定的价格。ZJY为了赚取最高利益,她会选择从A城市买入再转手卖到B城市。由于ZJY买宝石时经常卖萌,因而凡是ZJY路过的城市,这座城市的宝石价格会上涨。让我们来算算ZJY...

StrideTG的博客 565

从零到一:手把手教你用C# WinForms搭建工控上位机(含Panel控件布局与事件处理详解)

本文详细介绍了如何使用C# WinForms框架从零开始搭建工控上位机系统,重点讲解了Panel控件的布局技巧和事件处理机制。通过实战案例,帮助开发者掌握界面分区规划、动态窗体切换及数据通信等核心功能,适用于工业自动化监控系统的开发。

weixin_30321709的博客 607

17、高通8155座舱平台--QNX开发基础

我个人习惯,拿到一个新板子,第一件事就是打开IDE,建一个空的QNX项目,然后跑一遍Hello World。比如,当触摸屏被按下时,驱动发一个脉冲给UI进程,告诉它“嘿,有人摸屏幕了”。我在8155上调试时,就遇到过因为脉冲优先级太低,导致触摸响应延迟的问题。IDE自带的编译器是qcc,它其实是gcc的封装。QNX的IPC机制,可以说是它最牛的地方。嗯,这套流程走下来,你对QNX开发的基本功就差不多了。QNX默认的消息缓冲区大小是64KB,如果你要传大块数据,比如音频流,那就得用共享内存了。

woailuojp的博客 48

「TJOI2015」旅游 解题报告

「TJOI2015」旅游 LCT沙比题 考虑我们其实是在维护一条链的\(\max\limits_{i<j} v_j-v_i\) 每次直接拿左右子树更新一下就可以了 写的时候把两个方向都维护一下,方便翻转 Code: #include <cstdio> #include <cctype> #include <algorithm> template <...

weixin_30802273的博客 181

Devexpress16.2.6破解工具

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

2019 第一试【迅雷】【Alice&Bob】【TJOI2015旅游】20190120

T1【TJOI2015旅游】 WOJ 4322 一道树链剖分,不过我还不会,就先跳过。 T2【迅雷】 WOJ 2876 唯一 一道考场做出的题,确实有点水,看完题面,就大概知道是类似于kruskalkruskalkruskal的并查集做法。 输入边,排序,从大到小看。 如果电脑和资源器连通,就结束并输出当前这条边的长度。 【注意每次合并都要把节点信息更新至祖先节点!!!还有别忘了正无穷...

cxr的博客 212

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《P3976 [TJOI2015] 旅游》

摘要:本文描述了一个基于树形结构的宝石买卖问题。给定n个城市组成的树结构,每个城市有初始宝石价格。每次查询给出路径起点a、终点b和涨价v,要求计算从a到b路径上的最大买卖利润(买入后卖出),并更新路径上所有城市宝石价格。算法使用DFS寻找路径,遍历路径计算最大利润(类似股票买卖问题),最后更新路径价格。时间复杂度为O(q*n),适用于n,q≤5×10^4的数据规模。

Jasmine_llq的博客 637

[树剖] [TJOI2015] 旅游

[TJOI2015] Travel 考试题,考场上树剖4K码炸了,整出来了一个只能正确求出从深度大的点走到深度小的点的代码 考虑维护几个值:(树剖你维护就是了,主要是要想清楚要维护什么) 区间 max,区间 min,两个方向的利润最大值( forward , bakward ),当然还需要 lazy_tag 其中forwardp=max⁡{forwardlch,forwardrch,maxxlch−minnrch}bakwardp=max⁡{bakwardlch,bakwardrch,maxxrch−min

Antimonysbguy的博客 177

TJOI2015 旅游

题目链接:戳我 树上有向信息合并。 用树链剖分把其转化为序列上的问题——求区间中最大数-最小数的差,限制为最小数必须在最大数前面选取。 有两种选择方法,一种是先选择全局最大数,在它前面区间中选择最小数。一种是选择全局最小数,然后在它后面的区间种选择最大的。(证明只有这两种情况——加入我们选择了一个全局次大,只有当最小数小于它前面区间最小数才有可能最优,最佳情况下会选到全局最小。但是由于它...

weixin_30877181的博客 105

【BZOJ3999】[TJOI2015]旅游(Link-Cut Tree)

【BZOJ3999】[TJOI2015]旅游(Link-Cut Tree) 题面 BZOJ 洛谷 题解 一道不难的\(LCT\)题(用树链剖分不是为难自己吗,这种有方向的东西用\(LCT\)不是方便那很多吗。。。) 维护一下"左子树的最小值减去右子树的最大值"的最大值就行了。 因为要支持翻转操作,所以右边反过来也支持一下,然后直接回答就行了。 #include<iostream> #i...

weixin_30627381的博客 110

洛谷P3976 [TJOI2015] 旅游【树链剖分综合】题解

对于维护信息复杂的线段树,查询时只返回一个值往往得不到正确答案,没有覆盖全部情况,应当直接返回结点,再使用merge函数对信息进行合并,得出最终解。

MorningLa的博客 453

BZOJ3999 [TJOI2015]旅游

水题……链剖然后维护区间最大值,最小值,和区间从左往右走的答案,还有从右往左走的答案即可 #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define

neither_nor 1095

【树剖】 [TJOI2015]旅游

门 题目 一棵带点权的树上 每次询问查找x−>yx->yx−>y的路径上先经过uuu,再经过vvv,av−aua_v-a_uav​−au​的最大值 之后将x−>yx->yx−>y路径每个点权加vvv 题解 额。。。不知道是出题人还是我的语文有问题,我开始认为是一次询问可以多次买入卖出,然后就搞了一个乱七八糟的序列dp,然后炸掉。。。 树剖好 题 思考怎样求答案 假设我们己经将左边,右边的求好了,要合并信息到一起 一共三种情况 ①ans=ansl②ans=ansr③ans

ygmjsjdboy的博客 185

[TJOI 2015] 旅游

题目描述: 树上可修改的两点间有序差值最大值… 题目分析: 线段树先分别维护 两个方向的差值最大值 把所有链记录下来 答案要么在一段内,要么最值分别分布在两段内 我们就用每一段的答案更新答案,再单独拿出所有的剖出的链,考虑相互影响来更新答案 题目链接: Luogu 3976 COGS 1978 BZOJ 3999 Ac 代码: #include &lt;cstr...

HT008的Blog 280

BZOJ3999: [TJOI2015]旅游

BZOJ3999: [TJOI2015]旅游 Description 为了提高智商,ZJY准备去往一个新世界去旅游。这个世界的城市布局像一棵树。每两座城市之间只有一条路径可 以互达。每座城市都有一种宝石,有一定的价格。ZJY为了赚取最高利益,她会选择从A城市买入再转手卖到B城市 。由于ZJY买宝石时经常卖萌,因而凡是ZJY路过的城市,这座城市的宝石价格会上涨。让我们来算算ZJY旅游完之...

weixin_30381317的博客 183

[BZOJ3999] [TJOI2015]旅游

传送门http://www.lydsy.com/JudgeOnline/problem.php?id=3999题目大意给定一棵树,树上有权值,要求支持 查询树上两点a—>b(有方向)a—>b(有方向)间路径上max(xj−xi)max(x_j-x_i)且j到a的距离比i大j到a的距离比i大 以及路径整体+c+c题解树链剖分+线段树合并 注意细节!!const maxn=50040; t

slongle的专栏 1209

bzoj3999: [TJOI2015]旅游(树链剖分)

传送门 树链剖分菜题。 题意不清差评。 题意简述(保证清晰):给一棵带权的树,每次从aaa走到bbb,在走过的路径上任意找两个点,求后访问的点与先访问的点点权差的最大值。 思路: 考虑暴力:维护路径的前缀最小值和后缀最大值然后更新答案。 然后可以用线段树优化这个过程。 对于当前的线段树节点,它的答案=max(左儿子答案,右儿子答案,右儿子最大值−左儿子最小值)max(左儿子答案,右儿子答案,右儿...

苟为蒟蒻又何妨 238
上一篇: [SDOI2014] 旅行
下一篇: [WC2006] 水管局长
NephrenRuqInsania
博客等级 码龄8年 20粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值