当前位置: 首页 > 编程日记 > 正文

bzoj1036: [ZJOI2008]树的统计Count 树链剖分

一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身,

树链剖分裸题

树链剖分就是将树剖成重链和轻链,然后按重儿子优先的dfs序建线段树,然后遇到查询时,只需在树上暴跳即可,每次将深度大的点跳到这条链的顶端,直到顶端相同(本质还是dfs序线段树,只是建树方式不太一样便可维护链上的信息,)复杂度O(nlognlogn),树上暴跳复杂度是O(logn),因为当树退化时跳的越远,所以复杂度logn

/**************************************************************Problem: 1036User: walfyLanguage: C++Result: AcceptedTime:2524 msMemory:5552 kb
****************************************************************///#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0)using namespace std;const double g=10.0,eps=1e-12;
const int N=30000+10,maxn=60000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;struct edge{int to,Next;
}e[maxn];
int cnt,head[N];
int son[N],fa[N],top[N],sz[N],id[N];
int res,w[N],re[N],dep[N];
void add(int u,int v)
{e[cnt].to=v;e[cnt].Next=head[u];head[u]=cnt++;
}
void init()
{cnt=0;memset(head,-1,sizeof head);memset(son,-1,sizeof son);
}
void dfs1(int u,int f,int de)
{fa[u]=f;sz[u]=1;dep[u]=de;for(int i=head[u];~i;i=e[i].Next){int v=e[i].to;if(v!=f){dfs1(v,u,de+1);sz[u]+=sz[v];if(son[u]==-1||sz[v]>sz[son[u]])son[u]=v;}}
}
void dfs2(int u,int f,int tp)
{top[u]=tp;id[u]=++res;if(son[u]!=-1)dfs2(son[u],u,tp);for(int i=head[u];~i;i=e[i].Next){int v=e[i].to;if(v!=f&&v!=son[u])dfs2(v,u,v);}
}
int sum[N<<2],ma[N<<2];
void pushup(int rt)
{sum[rt]=sum[rt<<1]+sum[rt<<1|1];ma[rt]=max(ma[rt<<1],ma[rt<<1|1]);
}
void build(int l,int r,int rt)
{if(l==r){sum[rt]=ma[rt]=w[re[l]];return ;}int m=(l+r)>>1;build(ls);build(rs);pushup(rt);
}
void update(int x,int c,int l,int r,int rt)
{if(l==r){sum[rt]=ma[rt]=c;return ;}int m=(l+r)>>1;if(x<=m)update(x,c,ls);else update(x,c,rs);pushup(rt);
}
int queryma(int L,int R,int l,int r,int rt)
{if(L<=l&&r<=R)return ma[rt];int m=(l+r)>>1,ans=-1e9;if(L<=m)ans=max(ans,queryma(L,R,ls));if(m<R)ans=max(ans,queryma(L,R,rs));return ans;
}
int querysum(int L,int R,int l,int r,int rt)
{if(L<=l&&r<=R)return sum[rt];int m=(l+r)>>1,ans=0;if(L<=m)ans+=querysum(L,R,ls);if(m<R)ans+=querysum(L,R,rs);return ans;
}
int query(int op,int a,int b)
{int f1=top[a],f2=top[b],ans=0;if(op==0)ans=-1e9;while(f1!=f2){if(dep[f1]<dep[f2])swap(f1,f2),swap(a,b);if(op==0)ans=max(ans,queryma(id[f1],id[a],1,res,1));else ans+=querysum(id[f1],id[a],1,res,1);a=fa[f1];f1=top[a];}if(dep[a]>dep[b])swap(a,b);if(op==0)ans=max(ans,queryma(id[a],id[b],1,res,1));else ans+=querysum(id[a],id[b],1,res,1);return ans;
}
int main()
{int n;scanf("%d",&n);init();for(int i=1;i<n;i++){int a,b;scanf("%d%d",&a,&b);add(a,b);add(b,a);}for(int i=1;i<=n;i++)scanf("%d",&w[i]);dfs1(1,-1,1);dfs2(1,-1,1);for(int i=1;i<=res;i++)re[id[i]]=i;build(1,res,1);int q;scanf("%d",&q);while(q--){char op[10];int a,b;scanf("%s%d%d",op,&a,&b);if(op[1]=='M')printf("%d\n",query(0,a,b));else if(op[1]=='S')printf("%d\n",query(1,a,b));else update(id[a],b,1,res,1);}return 0;
}
/***********************
8
1 2
1 7
2 3
2 4
4 5
4 6
7 8
***********************/
View Code

转载于:https://www.cnblogs.com/acjiumeng/p/9021585.html

相关文章:

cocos lua 加密方案

cocos2d使用的是luajit&#xff0c;lua原生编译出来的bytecode和luajit是不兼容的&#xff0c;所以直接用luac法编译出来的bytecode脚本无法在cocos2d中使用。 目前所指的解决方案有2个&#xff1a; A.luajit加密&#xff1a; 1、官网下载luajit&#xff08;http://luajit.org/…

VS2010创建ATL类时需要手动填写ProgID

在新建ATL类的时候VS2010默认是不填写ProgID的&#xff1a; 所以默认创建的类生成的rgs文件中只有NoRemove CLSID这一栏&#xff0c;导致在JS中使用new ActivexObject(“LibName.ClassName”)失败。如果想用ActivexObject创建类的话就必须填写ProgID。转载于:https://www.cnblo…

【官网搭建】在网站首页底部添加备案号链接至工信部首页及版权所有。

在网站首页底部添加备案号链接至工信部首页及版权所有。&#xff08;工信部链接&#xff1a;http://beian.miit.gov.cn或http://www.beian.miit.gov.cn&#xff09; 在搭建网址的时候你是否受到过这种邮件&#xff1f; 下面提供一个代码模板 <div class"foot_bot&quo…

如何在linux下解压缩rar格式的文件压缩包

前言&#xff1a;没有特殊原因&#xff0c;文档如果要传到linux上&#xff0c;一定要打成*.zip格式&#xff0c; 这样方便解压&#xff0c;一般来说没有理由要用rar.关于 linux上unzip命令有空细讲&#xff0c; 本节讲下&#xff0c;如何让linux支持解压缩rar文件 一 、系统环境…

appium+python自动化45-夜神模拟器连不上(adb server version (36) doesn't match this client (39); killing...)...

前言 最新下了个最新版的夜神模拟器&#xff0c;然后adb devices发现连不上模拟器了&#xff0c;报adb server version (36) doesnt match this client (39); killing... 从报错信息看是adb版本不匹配导致的&#xff0c;接下来讲如何解决这个问题 环境&#xff1a; 夜神模拟器 …

Android.mk文件语法规范

序言&#xff1a; ------------- 此文档旨在描述Android.mk文件的语法&#xff0c;Android.mk文件为Android NDK(原生开发&#xff09;描述了你C/C源文件。为了明白下面的内容&#xff0c;你必须已经阅读了docs/OVERVIEW.TXT的内容&#xff0c;它解释了Android.mk文件扮演的角色…

【硬件基础】制作直流电源

要求&#xff08;其实就是个课设&#xff09;&#xff1a; 利用二极管的基本特性、三极管的基本特性、稳压电源等知识&#xff0c;设计相 应的模拟电路&#xff0c;设计制作放大倍数可变的直流放大器。 任务要求&#xff1a; &#xff08;1&#xff09;用集成芯片制作一个 0~1…

RanceQuest2_从委托到Lambda_会用(递归数学函数)

二连发 使用Lambda表达式编写递归函数 ——摘自老赵点滴 - 追求编程之美。 todo用手敲30遍&#xff0c;搞定——泛型委托&#xff0c;Lambda表达式&#xff0c;简单的数学递归。 遗憾的是&#xff0c;原本希望更进一步做出一个通用的递归方法表达式出来&#xff0c;受所学所限&…

[转载].sscanf的用法

原作者不详。 名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明&#xff1a; sscanf与scanf类似&#xff0c;都是用于输入的&a…

As与强制类型转换的区别以及Is运算符的使用

前言&#xff1a; 开发人员经常需要将一个对象从一个类型转换成其他类型。 在c#中&#xff0c;类型转换按照转换方式分类分为了隐式转换和显式转换&#xff0c;按对象分类又分为了值类型转换和引用类型转换  CLR(参考&#xff1a;http://baike.baidu.com/view/605055.htm)允许…

SQL命令执行数据库备份

backup database XXXXX to diskD:\Bak\BACKUP.bak with init XXXXX是数据库名字转载于:https://www.cnblogs.com/lx0831/archive/2009/04/07/1431115.html

【硬件基础】振荡(时钟)周期、状态周期、机械周期、指令周期

前言&#xff1a; 尽管关于单片机的各种周期在网上随便一查就能查到&#xff0c;但于博主个人而言容易搞混&#xff0c;于复习定时器时决定写下这篇博客&#xff0c;相当于一次知识复习总结 振荡&#xff08;时钟&#xff09;周期&#xff1a; 以12M的单片机为例&#xff0c;其…

14条改善jquery代码的建议

2019独角兽企业重金招聘Python工程师标准>>> 从国外网站找到的。 http://www.tripwiremagazine.com/ajax/developer-toolbox/more-jquery-and-general-javascript-tips-to-improve-your-code.html 很有用。 转载于:https://my.oschina.net/dlpinghailinfeng/blog/26…

HDFS配额查询

### 查看目录配额 hdfs dfs -count -q -h /user/hive/warehouse/db_name.db ### 查看整个HDFS的空间大小 hdfs dfs -df -h /user/ Filesystem Size Used Available Use% hdfs://hdfs01 10 P 8 P 2 P 80%### 查看指定目录/数据库的大小 hdfs …

# 命令行新建 job 错误: ORA-01008 并非所有变量都已绑定 。

# 命令行新建 job 错误: ORA-01008 并非所有变量都已绑定 。 1、改正前代码: DECLARE job NUMBER; begin sys.dbms_job.submit(job > :job, what > P_AUTO_FETCH_RECORDS;, next_date > to_date(10-05-2011 15:58:35, dd-mm-yyyy hh24:mi:ss), interval > s…

【单片机】以输出方波为例的 定时器使用

实验要求&#xff1a; 利用Proteus软件画出电路图&#xff0c;单片机定时器/计数器以查询方式工作&#xff0c;在P1.0口产生周期为100us的连续方波&#xff0c;在P1.0口线上接上示波器观察波形。 前言&#xff1a;写这篇博客的意义在于&#xff0c;借助本实验可以复习定时器中断…

经典GNA整理

最近学习了各种GAN的结构。在此记录下。 转载于:https://www.cnblogs.com/yeran/p/11251842.html

Global.asax

GlobalFilterCollectionRepresents a classthat contains all the globalfilters.HandleErrorAttributemvc中提供了HandleErrorAttribute特性&#xff0c;该特性用于处理由操作方法引发的异常AreaRegistration.RegisterAllAreas();注册 ASP.NET MVC 应用程序中的所有区域RouteC…

leetcode_1. Two Sum

leetcode_1. Two Sum 前言&#xff1a; 这段时间开始敲leetcode。我认为这并不仅仅只是为了应付笔试&#xff0c;面试。而是确实有着一定的意义。 尤其&#xff0c;你提交代码后&#xff0c;网站会多方面验证你的答案。 另外&#xff0c;提交成功后&#xff0c;你可以查看自己的…

linux ngxtop安装安装及使用

写在前面&#xff1a; ngxtop是Nginx日志实时分析利器 1.下载 下载地址&#xff1a;https://github.com/lebinh/ngxtop 下载zip文件到本地 登录linux服务器&#xff0c;定位到安装目录&#xff0c;执行 rz&#xff0c;选中上一步下载的zip文件&#xff0c;上传完成后执行unzip…

POJ1088(滑雪)

题目链接 动态规划题。 题目大意&#xff1a;给定一个二维数组&#xff0c;数组中每个数代表一个高度&#xff0c;每次只能向相邻且高度下降的方向移动&#xff0c;求最长的移动距离。 View Code 1 #include <stdio.h>2 #include <memory.h>3 #define MAX(a,b) ((…

【硬件基础】个人感悟+C语言 引入头文件时引号括号的区别

前言&#xff1a; 惊&#xff01;一博主又在水博客 其实不然&#xff0c;单片机从大一下半年就已经开始自学&#xff0c;但是可能是由于高中养成的惰性思维&#xff0c;不愿意思考&#xff0c;只想靠时间来获得内心的满足感&#xff1a;看我今天又学了一天。其实&#xff0c;假…

走在网页游戏开发的路上(八)

游戏中定时器的设计 0. 前言 在游戏开发中计时器/定时器是必须的&#xff0c;而且会在多处用到&#xff0c;如吃药补血每秒回10点且持续1分钟、玩家从一点到达另一点的过程需要多少时间。下面是定时器在七雄争霸中的几个应用场景&#xff0c;直接上图&#xff1a; 场景1&#…

[epoll]epoll理解

转自&#xff1a;http://blog.51cto.com/yaocoder/888374 1. 流 首先我们来定义流的概念&#xff0c;一个流可以是文件&#xff0c;socket&#xff0c;pipe等等&#xff0c;可以进行I/O操作的内核对象&#xff0c;不管是文件&#xff0c;还是套接字&#xff0c;还是管道&#x…

[kuangbin带你飞]专题五 并查集 E - 食物链 (带权并查集)

E - 食物链 题目链接&#xff1a;https://vjudge.net/contest/66964#problem/E 动物王国中有三类动物A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。A吃B&#xff0c; B吃C&#xff0c;C吃A。 现有N个动物&#xff0c;以1&#xff0d;N编号。每个动物都是A,B,C中的一种…

关于内网linux系统如果安装nodejs,npm,express,mongodb,forever等

内网的linux系统要安装nodejs以及express等系列的框架&#xff0c;因为系统是局域网和互联网是物理隔离的&#xff0c;所以&#xff0c;没法像官网的安装教程那样直接install了&#xff0c;只能手动安装&#xff0c;这里已经我们自己的linux 系统suse10 为例&#xff1a; 1 No…

【基础知识】如何在word中粘贴出漂亮整洁的代码

使用工具&#xff1a; notepad、WPS 操作实现&#xff1a; 1、右击代码文件使用NPP打开文件 2、选中要复制的代码 3、如图所示&#xff0c;依次点击如下内容 4、直接粘贴到word中&#xff0c;如图

浅析SQL Server数据修复命令DBCC的使用

SQL Server数据库提供了修复命令DBCC&#xff0c;当SQL Server数据库遭到质疑或者是有的无法完成读取时可以尝试用此命令来修复。以下是一些常见的DBCC修复命令&#xff0c;希望会给读者带来帮助。 1. DBCC CHECKDB 重启服务器后&#xff0c;在没有进行任何操作的情况下&#x…

Python之Mysql及SQLAlchemy操作总结

一、Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to feng% identified by 1qazWSX; 3.创建表 create table Teacher(teaId int not null, teaname varchar(100), age int, sex enum(M, F), phone int); 4.查询 select * from t…

NSwagStudio for Swagger Api

本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client 1、运行WebApi项目 URL http://yourserver/swagger 然后你将看到界面如下 1.1 Web API 代…