P6845 题解

news/2025/10/22 20:09:05/文章来源:https://www.cnblogs.com/xihegudi/p/19158862

P6845
他是一个带修改的直径,直径就是两点间最长距离,很容易想到用差分,\(dis_x\) 表示 \(x\) 到根节点的距离 \(dis_x + dis_y - 2dis_{lca(x,y)}\) 去求,先抛开这个 \(lca\) , 修改一条边相当于修改这个边所对应的子树,显然可以用线段树去做,搞一个 \(dfs\) 序,改的话就用加标记,维护 \(mx,ans\) , \(ans_x = max(ans_{ls},ans_{rs},mx_{ls}+mx_{rs})\) 全部这其中难办的点就是这个 \(lca\) ,想到可以用欧拉序来求,我们会发现两点 \(lca\) 在两点所夹的区间中,且是这个区间里的 \(dis_{min}\),可是单个 \(lca\) 比较难求,我们可以做一步转化,将点转到序列上,在这个区间中正确的 \(lca\) 所产生的就一定是这个区间里贡献最大的,所以即使考虑其他区间中的点也对答案没有影响,所以转化为了:

  1. 区间修改
  2. 给你 \(a,c\) ,对于 \(b\)\(a \le b \le c\) ,求 \(s_a + s_c - 2s_b\) 最大值

由于这三个数是有位置限制,那么合并的时候有位置限制的两个数就可以前面的从 \(ls\) 转移,后面的从 \(rs\) 转移,所以可以考虑维护 \(mx,mn,ab,bc,abc,lzy\) ,如 \(abc_x = max(abc_{ls},abc_{rs},ab_{ls}+mx_{rs},mx_{ls}+ab_{rs})\) ,其他的随便转移即可。

#include <bits/stdc++.h>
#define int long long
#define maxn 100010
#define pb push_back
#define vec vector
#define pii pair<int,int>
#define fir first
#define sec second
#define ls (x << 1)
#define rs (x << 1 | 1)
#define mid ((l + r) >> 1)
using namespace std;
int n,q,w;
vec <pii> v[maxn];
struct edge{int x,y,w;
}e[maxn];
int dfn[maxn << 1];
int l[maxn],r[maxn];
int tot = 0;
int dep[maxn];
int dis[maxn];
struct node{int mx,mn;int ab,bc,abc;int lzy;
}s[maxn << 3];
void dfs(int x,int fa){dfn[++tot] = x;dep[x] = dep[fa] + 1;l[x] = tot;for(auto to : v[x]){int y = to.fir,w = to.sec;if(y == fa){continue;}dis[y] = dis[x] + w;dfs(y,x);dfn[++tot] = x; }r[x] = tot;
}
void up(int x){s[x].mn = min(s[ls].mn,s[rs].mn);s[x].mx = max(s[ls].mx,s[rs].mx);s[x].ab = max(s[ls].mx - s[rs].mn * 2,max(s[ls].ab,s[rs].ab));s[x].bc = max(s[rs].mx - s[ls].mn * 2,max(s[ls].bc,s[rs].bc));s[x].abc = max(max(s[ls].abc,s[rs].abc),max(s[ls].mx + s[rs].bc,s[ls].ab + s[rs].mx));
}
void build(int x,int l,int r){if(l == r){int now = dis[dfn[l]];s[x] = {now,now,-now,-now,0};return ; }build(ls,l,mid);build(rs,mid + 1,r);up(x);
}
void down(int x){s[ls].lzy += s[x].lzy;s[rs].lzy += s[x].lzy;s[ls].mn += s[x].lzy;s[rs].mn += s[x].lzy;s[ls].mx += s[x].lzy;s[rs].mx += s[x].lzy;s[ls].ab -= s[x].lzy;s[rs].ab -= s[x].lzy;s[ls].bc -= s[x].lzy;s[rs].bc -= s[x].lzy;s[x].lzy = 0;
}
void modify(int x,int l,int r,int L,int R,int v){if(L <= l && R >= r){s[x].mx += v;s[x].mn += v;s[x].ab -= v;s[x].bc -= v;s[x].lzy += v;return ;}if(s[x].lzy){down(x);}if(L <= mid){modify(ls,l,mid,L,R,v);}if(R > mid){modify(rs,mid + 1,r,L,R,v);}up(x);
}
signed main(){cin >> n >> q >> w;for(int i = 1,x,y,z;i < n;i++){cin >> x >> y >> z;v[x].pb({y,z});v[y].pb({x,z});e[i] = {x,y,z};}dfs(1,0);build(1,1,tot);int ans = 0;for(int i = 1,x,y;i <= q;i++){cin >> x >> y;x = (x + ans) % (n - 1) + 1;y = (y + ans) % w;int now;if(dep[e[x].x] < dep[e[x].y]){now = e[x].y;}else{now = e[x].x; }modify(1,1,tot,l[now],r[now],y - e[x].w);e[x].w = y;ans = s[1].abc;cout << ans << endl;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

office2024绿色精简版

一、简介 首先需要说明的是,目前的安装方法只适合Windows10、11,并且只支持64位的操作系统,这点需要大家注意。大家下载压缩包解压后,在文件夹中会得到三个运行程序,分别是dll修复程序、和office残余文件彻底清理…

51单片机实践之数码管电子时钟/时间呈现及其设置

51单片机实践之数码管电子时钟/时间呈现及其设置pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

LGP3694 邦邦的大合唱站队 学习笔记

LGP3694 邦邦的大合唱站队 学习笔记 \(\texttt{Luogu Link}\) 前言 状压热身题。\(\texttt{Warm up!}\) 另外,你知道吗,设定上,邦邦已经火了…… 题意简述 \(n\) 个偶像排成一列,他们来自 \(m\) 个不同的乐队。每个…

2025.10.22学习记录

2025.10.22课程总结 本次学习聚焦 设计规范、查询技术、高级功能 三大模块,目标是掌握从表结构设计到复杂数据查询的全流程能力,为后续数据分析、系统开发奠定基础。 范式理论 核心观点:范式是电商数据结构化的基础…

LeeCode_101对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1:输入:root = [1,2,2,3,4,4,3] 输出:true class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q){if(p == nullptr || q == nullptr){retu…

TRAE 设计团队如何玩转 Vibe Coding(上)|高美感页面生成篇

资料来源:火山引擎-开发者社区本内容分为上下两篇,主要和大家分享 TRAE 设计团队基于 TRAE 工具的 Vibe Coding 探索实践,包括三类场景的搭建和价值收益的案例,帮助设计师探索如何通过 Vibe Coding 放大设计价值 /…

详细介绍:观察者模式(Observer Pattern)定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

详细介绍:观察者模式(Observer Pattern)定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。2025-10-22 19:58 tlnshuju 阅读(0) 评论(0) 收藏 举报pre …

LeeCode_226反转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1:输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] //法一: class Solution { public:TreeNode* invertTree(TreeNode* root){if(root =…

TRAE 设计团队如何玩转 Vibe Coding(下)|设计工具生成与提效篇

资料来源:火山引擎-开发者社区本内容分为上下两篇,主要和大家分享 TRAE 设计团队基于 TRAE 工具的 Vibe Coding 探索实践,包括三类场景的搭建和价值收益的案例,帮助设计师探索如何通过 Vibe Coding 放大设计价值 /…

衡量效率,质量,运维的效率指标

目录背景和价值一、效率类指标(一)开发效率(二)运维效率二、质量类指标(一)代码质量(二)产品质量(三)测试质量(四)运维质量参考资料 背景和价值 在IT团队中,衡量效率和质量的指标可从多个维度进行定义,以…

2025多校冲刺CSP模拟赛7 总结

比赛:2025多校冲刺CSP模拟赛7 日期:\(25.10.22\),场地:\(\text{accoder}\),排名:\(56/73\)! 估分:\(30+0+[80,100]+0=110\) 终分:\(30+0+80+0=110\) 应该得分:\(100+100+[80,100]+?=280\) 失分 比赛决策问题…

详细介绍:wpf之 Popup

详细介绍:wpf之 Popuppre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

? #4

100 + 60 + 50 + 100 = 310, Rank 1/6.怎么 swap(min(B,C),D) /wx2024暑期CSP-S&NOIP模拟赛第2套 链接:link 题解:link 的题解区 时间:4h (2025.10.22 14:00~18:00) 题目数:4 难度:A B C D\(\color{#F39C11} …

结对项目-生成四则运算

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13479姓名 学号 GitHu…

CSS3 超实用属性:pointer-events (可穿透图层的鼠标事件)

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 CSS3 pointer-events 属性:实现可穿透图层的鼠标事件 在网页开发中,我们通常会遇到多个元素重叠的情况。在这种情况下,如何使得被遮挡的元素仍然能够响应鼠标…

C++开源库使用:nlohmann/json - 指南

C++开源库使用:nlohmann/json - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

实用指南:JAVA学习-预科部分(路线、博客、预备基础)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【比赛记录】2025CSP+NOIP 冲刺模拟赛合集Ⅱ

2025CSP-S模拟赛65(HZOJ CSP-S模拟37)A B C D Sum Rank100 40 15 - 155 7/12HZOJ 上也有这场比赛,但我没看见。放过去大概是个 14/24 左右吧。 A. gcd&xor (gcdxor) 首先打表,发现对于所有合法的 \((x,y)\),都…

取证-windbg和dmp,以及文件分析基本流程

.dmp文件及Dump Flie,是一种内存快照文件 说到内存快照就不得不提一下文件类型 说明 常见用途.raw 原始磁盘映像文件(Raw Image),完整保存磁盘或内存的原始二进制数据。 虚拟机快照、数字取证、系统备份。.dmp 内存…