HDU 3966 树链剖分后线段树维护

题意:

  一棵树,

  操作1.$path(a,b)$之间的点权$+k$

  操作2.单点查询

题解:

树链剖分即可,注意代码细节,双向映射

主要是记录一下板子

#include <string.h>
#include <stdio.h>
#include <algorithm>
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define fi first
#define se second
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
#define per(ii,a,b) for(int ii=b;ii>=a;--ii)
#define forn(ii,x) for(int ii=head[x];ii;ii=edge[ii].next)
using namespace std;
const int maxn=5e4+20,maxm=2e6+10;
const int INF=0x3f3f3f3f;
const ll mod=1e9+7;
//head
int casn,n,m,k;
int num[maxn];
class segtree{public:
#define nd node[now]
#define ndl node[now<<1]
#define ndr node[now<<1|1]int node[maxn*4],n;int *mp;void maketree(int s,int t,int now){if(s==t){nd=num[mp[s]];return ;}else nd=0;maketree(s,(s+t)/2,now<<1);maketree((s+t)/2+1,t,now<<1|1);}void init(int nn,int *mps){n=nn;mp=mps;maketree(1,n,1);}void update(int s,int t,int x){update(s,t,x,1,n,1);}int query(int pos){return query(pos,1,n,1);}void update(int s,int t,int x,int l,int r,int now=1){if(s<=l&&t>=r) {nd+=x;return ;}ndl+=nd,ndr+=nd;nd=0;int mid=(l+r)/2;if(s<=mid) update(s,t,x,l,mid,now<<1);if(t>mid) update(s,t,x,mid+1,r,now<<1|1);}int query(int pos,int l,int r,int now=1){if(l==r) return nd;ndl+=nd,ndr+=nd;nd=0;int mid=(l+r)/2;if(pos<=mid) return query(pos,l,mid,now<<1);else  return query(pos,mid+1,r,now<<1|1);}
}tree;
namespace chain{struct data_e{int to,next;}edge[maxn<<1];int head[maxn],nume,mp[maxn];inline void addedge(int a,int b){edge[++nume]={b,head[a]};head[a]=nume;}int ltop[maxn],fa[maxn],deep[maxn];int sz[maxn],remp[maxn];int son[maxn],cnt;void init(){rep(i,1,n) head[i]=0;cnt=0,nume=1;}void dfs1(int now,int pre,int d){deep[now]=d,fa[now]=pre,sz[now]=1,son[now]=0;forn(i,now){int to=edge[i].to;if(to!=pre) {dfs1(to,now,d+1);sz[now]+=sz[to];if(sz[to]>sz[son[now]]) son[now]=to;}}}void dfs2(int now,int pre,int sp){ltop[now]=sp;mp[now]=++cnt;remp[cnt]=now;if(son[now])  dfs2(son[now],now,sp);forn(i,now){int to=edge[i].to;if(to!=son[now]&&to!=pre) dfs2(to,now,to);}}void update(int a,int b,int val){while(ltop[a]!=ltop[b]){if(deep[ltop[a]]<deep[ltop[b]])swap(a,b);tree.update(mp[ltop[a]],mp[a],val);a=fa[ltop[a]];}if(deep[a]>deep[b])swap(a,b);tree.update(mp[a],mp[b],val);}
};int main() {while(~scanf("%d %d %d",&n,&m,&k)){rep(i,1,n) scanf("%d",num+i);chain::init();while(m--){int a,b;scanf("%d%d",&a,&b);chain::addedge(a,b);chain::addedge(b,a);}chain::dfs1(1,0,1);chain::dfs2(1,1,1);tree.init(n,chain::remp);while(k--){char x[10];int a,b,c;scanf("%s",x);if(x[0]=='Q'){scanf("%d",&a);printf("%d\n",tree.query(chain::mp[a]));}else if(x[0]=='I'){scanf("%d %d %d",&a,&b,&c);chain::update(a,b,c);}else {scanf("%d %d %d",&a,&b,&c);chain::update(a,b,-c);}}}
}

 

转载于:https://www.cnblogs.com/nervendnig/p/10638239.html

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

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

相关文章

VUE config/index.js文件配置

&#xfeff;&#xfeff; 当我们需要和后台分离部署的时候&#xff0c;必须配置config/index.js: 用vue-cli 自动构建的目录里面 &#xff08;环境变量及其基本变量的配置&#xff09;123456789101112131415var path require(path)module.exports {build: {index: path.res…

数据规则列表加导入导出

1.进入bos&#xff0c;打开数据规则&#xff0c;进入列表菜单 2.点击事件-新增操作 3.点击新增 4.点击操作类型&#xff0c;输入%引入 5.点击确定&#xff0c;保存后生效&#xff0c;导出 、引入模板设置同理转载于:https://www.cnblogs.com/RogerLu/p/10643521.html

Lecture 6 Order Statistics

Given n elements in array, find kth smallest element (element of rank k) Worst-case linear time order statistics --by Blum, Floyd, Pratt, Rivest, Tarjan --idea: generate good pivot recursively. Not so hot, because the constant is pretty big.

C++ qsort() 函数调用时实参与形参不兼容的问题解决

《剑指OFFER》刷题笔记 —— 扑克牌顺子 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿&#xff01;&#xff01;“红心A…

linux jenkins部署之路之,ftp部署怎么匿名还好用咋解决思密达

怎么安装就不说了&#xff0c;网上一堆 这噶搭是配置 目录是/etc/vsftpd/vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf# # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more u…

powerCat进行常规tcp端口转发

实战中&#xff0c;我们也会遇到需要我们进行端口转发的情况&#xff0c;比如已经拿下的目标机1是在dmz区&#xff0c;而目标1所在内网的其他目标只能通过目标1去访问&#xff0c;这时候我们就需要端口转发或者代理来进行后渗透。这次就要介绍一个加强版的nc&#xff0c;基于po…

Lecture 7 Hashing Table I

Hash |---Hash function: Division, Multiplication |---Collision: Chaining, Open addressing(Linear,Double hasing) Symbol-table problem: Table S holding n records pointer --> key|satelite data (record) Hashing: Hash function h maps keys “randomly”…

SpringCloud 微服务

一微服务架构概述1.1 微服务特性以及优点每个服务可以独立运行在自己的进程里一系列独立运行的微服务(goods,order,pay,user,search…)共同构建了整个系统每个服务为独立的业务开发&#xff0c;一个微服务只关注某个特定的功能&#xff0c;例如用户管理&#xff0c;商品管理微服…

window起别名

http://www.bagualu.net/wordpress/archives/1714 转载于:https://www.cnblogs.com/wei-huan/p/10654026.html

vue在ie9中的兼容问题

问题总结 https://github.com/vuejs-templates/webpack/issues/260 首先npm install --save babel-polyfill然后在main.js中的最前面引入babel-polyfillimport babel-polyfill在index.html 加入以下代码&#xff08;非必须&#xff09;<meta http-equiv"X-UA-Compatib…

Lecture 9 Random built Binary Search Trees BSTs

Random built Binary Search Trees BSTs E[hight] near 3logn Quick Sort? Relation to Quick Sort: BST sort & Quick sort make same comparisons but in a different order. Randomized BST Sort: 1. Randomly permute A 2. BST sort(A)

spring boot 带远程调试启动方式

比如启动service-system-0.0.1-SNAPSHOT.jar和service-file-0.0.1-SNAPSHOT.jar nohup java -Xdebug -Xrunjdwp:servery,transportdt_socket,address7999,suspendn -jar service-system-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &nohup java -Xdebug -Xrunjdwp:se…

文件读写

读写文件通常都是IO操作&#xff0c;Python内置了读文件的函数&#xff0c;用法和C是兼容的。 读写文件前&#xff0c;我们先必须了解一下&#xff0c;在磁盘上读写文件的功能都是有操作系统提供的&#xff0c;现代操作系统不允许普通的程序直接操作磁盘&#xff0c;所以&#…

Vue项目中遇到了大文件分片上传的问题

Vue项目中遇到了大文件分片上传的问题&#xff0c;之前用过webuploader&#xff0c;索性就把Vue2.0与webuploader结合起来使用&#xff0c;封装了一个vue的上传组件&#xff0c;使用起来也比较舒爽。 上传就上传吧&#xff0c;为什么搞得那么麻烦&#xff0c;用分片上传&#x…

NDK学习笔记-使用现有so动态库

前面将的都是如何使用C/C文件生成so动态库&#xff0c;那么在使用别人的so动态库的时候应该怎么做呢&#xff1f;这篇文章就是使用一个变声功能的动态库&#xff0c;完成对于以有so动态库的说明。 动态库来源 在互联网中&#xff0c;有着许许多多动态库&#xff0c;很多厂商也对…

Spring cloud系列十四 分布式链路监控Spring Cloud Sleuth

1. 概述 Spring Cloud Sleuth实现对Spring cloud 分布式链路监控 本文介绍了和Sleuth相关的内容&#xff0c;主要内容如下&#xff1a; Spring Cloud Sleuth中的重要术语和意义&#xff1a;Span、Trance、AnnotationZipkin中图形化展示分布式链接监控数据并说明字段意义Spring …

Linux源码编译安装程序

一、程序的组成部分 Linux下程序大都是由以下几部分组成&#xff1a; 二进制文件&#xff1a;也就是可以运行的程序文件 库文件&#xff1a;就是通常我们见到的lib目录下的文件 配置文件&#xff1a;这个不必多说&#xff0c;都知道 帮助文档&#xff1a;通常是我们在linux下用…

selenium用法详解

selenium用法详解 selenium主要是用来做自动化测试&#xff0c;支持多种浏览器&#xff0c;爬虫中主要用来解决JavaScript渲染问题。 模拟浏览器进行网页加载&#xff0c;当requests,urllib无法正常获取网页内容的时候一、声明浏览器对象 注意点一&#xff0c;Python文件名或者…