[ZJOI2008]树的统计

[ZJOI2008]树的统计

题意:

在这里插入图片描述

题解:

树链剖分模板题,好久没打都忘了

代码:

#include <algorithm>
#include <cstdio>
#include <cstring>
#define lc o << 1
#define rc o << 1 | 1
const int maxn = 60010;
const int inf = 2e9;
int n, a, b, w[maxn], q, u, v;
int cur, h[maxn], nxt[maxn], p[maxn];
int siz[maxn], top[maxn], son[maxn], dep[maxn], fa[maxn], dfn[maxn], rnk[maxn],cnt;
char op[10];
inline void add_edge(int x, int y) {cur++;nxt[cur] = h[x];h[x] = cur;p[cur] = y;
}
struct SegTree {int sum[maxn * 4], maxx[maxn * 4];void build(int o, int l, int r) {if (l == r) {sum[o] = maxx[o] = w[rnk[l]];return;}int mid = (l + r) >> 1;build(lc, l, mid);build(rc, mid + 1, r);sum[o] = sum[lc] + sum[rc];maxx[o] = std::max(maxx[lc], maxx[rc]);}int query1(int o, int l, int r, int ql, int qr) {  // maxif (l > qr || r < ql) return -inf;if (ql <= l && r <= qr) return maxx[o];int mid = (l + r) >> 1;return std::max(query1(lc, l, mid, ql, qr), query1(rc, mid + 1, r, ql, qr));}int query2(int o, int l, int r, int ql, int qr) {  // sumif (l > qr || r < ql) return 0;if (ql <= l && r <= qr) return sum[o];int mid = (l + r) >> 1;return query2(lc, l, mid, ql, qr) + query2(rc, mid + 1, r, ql, qr);}void update(int o, int l, int r, int x, int t) {if (l == r) {maxx[o] = sum[o] = t;return;}int mid = (l + r) >> 1;if (x <= mid)update(lc, l, mid, x, t);elseupdate(rc, mid + 1, r, x, t);sum[o] = sum[lc] + sum[rc];maxx[o] = std::max(maxx[lc], maxx[rc]);}
} st;
void dfs1(int o) {son[o] = -1;siz[o] = 1;for (int j = h[o]; j; j = nxt[j])if (!dep[p[j]]) {dep[p[j]] = dep[o] + 1;fa[p[j]] = o;dfs1(p[j]);siz[o] += siz[p[j]];if (son[o] == -1 || siz[p[j]] > siz[son[o]]) son[o] = p[j];}
}
void dfs2(int o, int t) {top[o] = t;cnt++;dfn[o] = cnt;rnk[cnt] = o;if (son[o] == -1) return;dfs2(son[o], t);for (int j = h[o]; j; j = nxt[j])if (p[j] != son[o] && p[j] != fa[o]) dfs2(p[j], p[j]);
}
int querymax(int x, int y) {int ret = -inf, fx = top[x], fy = top[y];while (fx != fy) {if (dep[fx] >= dep[fy])ret = std::max(ret, st.query1(1, 1, n, dfn[fx], dfn[x])), x = fa[fx];elseret = std::max(ret, st.query1(1, 1, n, dfn[fy], dfn[y])), y = fa[fy];fx = top[x];fy = top[y];}if (dfn[x] < dfn[y])ret = std::max(ret, st.query1(1, 1, n, dfn[x], dfn[y]));elseret = std::max(ret, st.query1(1, 1, n, dfn[y], dfn[x]));return ret;
}
int querysum(int x, int y) {int ret = 0, fx = top[x], fy = top[y];while (fx != fy) {if (dep[fx] >= dep[fy])ret += st.query2(1, 1, n, dfn[fx], dfn[x]), x = fa[fx];elseret += st.query2(1, 1, n, dfn[fy], dfn[y]), y = fa[fy];fx = top[x];fy = top[y];}if (dfn[x] < dfn[y])ret += st.query2(1, 1, n, dfn[x], dfn[y]);elseret += st.query2(1, 1, n, dfn[y], dfn[x]);return ret;
}
int main() {scanf("%d", &n);for (int i = 1; i < n; i++)scanf("%d%d", &a, &b), add_edge(a, b), add_edge(b, a);for (int i = 1; i <= n; i++) scanf("%d", w + i);dep[1] = 1;dfs1(1);dfs2(1, 1);st.build(1, 1, n);scanf("%d", &q);while (q--) {scanf("%s%d%d", op, &u, &v);if (!strcmp(op, "CHANGE")) st.update(1, 1, n, dfn[u], v);if (!strcmp(op, "QMAX")) printf("%d\n", querymax(u, v));if (!strcmp(op, "QSUM")) printf("%d\n", querysum(u, v));}return 0;
}

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

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

相关文章

带你学习AOP框架之Aspect.Core[1]

在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;是函数式编程的一种衍生…

P7735-[NOI2021]轻重边【树链剖分,线段树】

前言 之前线上赛就A的题现在才写博客 正题 题目链接:https://www.luogu.com.cn/problem/P7735 题目大意 有nnn个点的一棵树&#xff0c;开始所有边都是轻边&#xff0c;mmm次操作。 把x→yx\rightarrow yx→y路径上所有点连接的重边都变为轻边&#xff0c;然后再把路径上的…

.NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

前面为了方便我们只是简单实现了基本业务功能的增删改查&#xff0c;但是登录功能还没有实现&#xff0c;而登录又是系统所必须的&#xff0c;得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能。今天我将带着大家一起来实现下我们的ASP.NET Core2.2开发的CMS系统…

张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署

如何在 Raspberry Pi 的 Raspbian 上构建使用 GPIO 引脚的 IoT 程序&#xff1f;你可能会回答使用 C 或 Python 去访问 Raspberry Pi 的引脚。现在&#xff0c;C# 程序员可以使用 .NET Core 在 Raspbian(Linux) 上构建 IoT 应用程序。只需要引入 System.Device.GPIONuGet 包即可…

在AspNetMvc中使用日志面板. Logdashboard 1.1beta

Logdashboard是Net下的日志面板,它支持AspNet与AspNetCore项目。关于更多LogDashboard的介绍请看这里--使用logdashboard查看可视化日志。就在刚刚LogDashboard发布了1.1的beta版,在这个版本中有以下变化https://github.com/liangshiw/LogDashboard/releases支持NetFramework的…

【正睿2021寒假省选第二轮集训 day 1】令牌生成 (组合数+二分)

description solution 打表yyds 其实符合条件的个数跟nnn&#xff08;非题目中的意思&#xff09;有着等差数列公式的千丝万缕关系 所以可以二分出具体值 最后答案的取值范围一定是长成[,)[,)[,)&#xff0c;左闭右开的形式的 而且两个边界一定是只差了最小的那个111&#xff…

CF464E-The Classic Problem【最短路,主席树】

正题 题目链接:https://www.luogu.com.cn/problem/CF464E 题目大意 nnn个点mmm条边的一张无向图&#xff0c;第iii条边长度为2xi2^{x_i}2xi​&#xff0c;求sss到ttt的最短路。 1≤n≤105,0≤m,xi≤1051\leq n\leq 10^5,0\leq m,x_i\leq 10^51≤n≤105,0≤m,xi​≤105 解题思路…

.NETStandard FreeSql v0.0.9 功能预览

年关将至&#xff0c;首页技术含量文章真是越来越少&#xff0c;理解大家盼着放假过年&#xff0c;哥们我何尝不是&#xff0c;先给大家拜个早年。兄弟我从11月底发了神经&#xff0c;开启了 ORM 功能库的开发之旅&#xff0c;历时两个月编码和文档整理&#xff0c;目前预览版本…

第十二届蓝桥杯C++赛后感

文章目录A 空间卡片直线货物摆放路径时间显示G砝码称重H杨辉三角形双向排列J括号序列注&#xff1a;有些代码忘了考试时怎么写的了&#xff0c;&#xff08;我也懒得重新写&#xff09;&#xff0c;所以很多题的代码是acwing蓝桥杯讲解里的&#xff0c;我对其进行注释和修改A 空…

SeaweedFS在.net core下的实践方案

一直对分布式的文件储存系统很感兴趣&#xff0c;最开始关注淘宝的TFS&#xff08;Taobao File System&#xff09;&#xff0c;好像搁浅了&#xff0c;官方地址无法访问&#xff0c;github上面&#xff0c;各种编译问题&#xff0c;无意间发现了SeaweedFS链接seaweedfs测试了一…

[C++ STL algorithm] lower_bound、upper_bound、unique的本质

lower_bound&#xff1a;返回第一个大于等于查找值的地址upper_bound&#xff1a;返回第一个严格大于查找值的地址 使用这两个函数需要的头文件 #include <algorithm> using namespace std;要求数组必须是有序/单调的 lower_bound lower_bound( a 1, a n 1, x );意…

蓝桥杯 I.双向排序

题目链接 题解&#xff1a; 比赛时就直接写了一个暴力sort交上&#xff0c;能骗一点分是一点 昨晚看了acwing的讲解&#xff0c;现在结合我的思路更新正解 题目中设计两个操作&#xff0c;一个是选定前x个数&#xff0c;使其降序&#xff0c;另一个是选定后y个数&#xff0c…

微软收购Citus Data | 再次肯定对开源的承诺,并加速了Azure PostgreSQL的性能和扩展...

作者&#xff1a;Rohan Kumar 翻译&#xff1a;周宝峰 从左到右&#xff1a;微软开源关系数据库总经理Sudhakar Sannakkayala&#xff0c;Citus Data首席技术官兼联合创始人Ozgun Erdogan&#xff0c;Citus Data首席执行官兼联合创始人Umur Cubukcu&#xff0c;Citus Data工…

Docker最全教程——MongoDB容器化(十三)

上一节我们讲述了数据库容器化之持久保存数据&#xff0c;本节将讲诉MongoDB容器化实践&#xff0c;并且接下来将逐步讲解其他数据库&#xff08;MySql、Redis等等&#xff09;的容器化实践&#xff0c;然后将讲诉一些分布式架构的项目实践。由于实践需要花费大量的时间&#x…

在.NET Core中使用Exceptionless分布式日志收集框架

一.Exceptionless简介Exceptionless 是一个开源的实时的日志收集框架&#xff0c;它可以应用在基于 ASP.NET&#xff0c;ASP.NET Core&#xff0c;Web Api&#xff0c;Web Forms&#xff0c;WPF&#xff0c;Console&#xff0c;MVC 等技术栈的应用程序中&#xff0c;并且提供了…

test1 3-15 模拟赛1

文章目录考试复盘matrixsetstring考试复盘 首先先说T1T1T1&#xff0c;嗯&#xff0c;发现了列是相互独立的&#xff0c;所以分开考虑了 但是实在没想到线性基&#xff0c;就顺着自己的思路硬搞了505050跑路 老实说&#xff0c;505050分的部分分写得都是迷迷糊糊的&#xff0c;…

华为云提供针对Nuget包管理器的缓存加速服务测试

在Visual Studio 2013、2015、2017中&#xff0c;使用的是Nuget包管理器对第三方组件进行管理升级的。而且 Nuget 是我们使用.NET Core的一项基础设施&#xff0c;.NET的软件包管理器NuGet.org是一项面向全球用户搭建的服务&#xff0c;不论用户身在何处&#xff0c;NuGet.org都…

test2 3-16 2021 模拟赛two

文章目录考试复盘染色问题芬威克树礼物考试复盘 先说T1T1T1 染色&#xff0c;以为是道数学题&#xff0c;推了有一会儿的公式&#xff0c;从颜色1到颜色m&#xff0c;感觉是dpdpdp转移 发现颜色重叠的方案可以转化为另外一种相邻不重叠的染色 但是推到颜色4的时候就发现自己…

ASP.NET Core 2.2 : 扒一扒新的Endpoint路由方案

ASP.NET Core 从2.2版本开始&#xff0c;采用了一个新的名为Endpoint的路由方案&#xff0c;与原来的方案在使用上差别不大&#xff0c;但从内部运行方式上来说&#xff0c;差别还是很大的。上一篇ASP.NET Core;图解路由(2.1 earler)详细介绍了原版路由方案的运行机制&#xff…

开源中国 2018 新增开源软件最受欢迎 TOP 50

本周开源中国陆续公布了两个年度榜单&#xff0c;分别是国产新秀榜 TOP 30 和国产新增榜 TOP 50。由于两个榜单的数据来源都是国内开源项目&#xff0c;所以会有部分项目同时出现在两个榜单上。今天公布的这份榜单 —— 开源中国 2018 新增开源软件最受欢迎 TOP 50&#xff0c;…