[51nod1462]树据结构
题面:
每个点有两个权值:vi, ti,一开始全部是零。
Q次操作:
读入o, u, d
o = 1 对u到根上所有点的vi += d
o = 2 对u到根上所有点的ti += vi * d
最后,输出每个点的ti值(n, Q <= 100000)
有50%的数据N,Q <= 10000
UPD:所以实际上只要维护三个标记就好,不用写矩乘.....复杂度O(nlog^2n * 下传标记复杂度)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
#define ui unsigned int
#define ull unsigned long long
const int maxn=,mxnode=maxn<<;
struct zs{int too,pre;}e[maxn];int tot,last[maxn];
struct mat{ll mp[][];}tag[mxnode],nul={,,,,,,,,};
int lc[mxnode],rc[mxnode],tt;
int dfn[maxn],tim,fa[maxn],bel[maxn],sz[maxn];
int i,j,k,n,m;
int L,R;mat TAG;
ll an[maxn]; int ra,fh;char rx;
inline int read(){
rx=getchar(),ra=,fh=;
while((rx<''||rx>'')&&rx!='-')rx=getchar();
if(rx=='-')fh=-,rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra*fh;
} mat operator *(mat a,mat b){
mat c;
int i,j,k;
for(i=;i<;i++)for(j=;j<;j++)for(k=c.mp[i][j]=;k<;k++)
c.mp[i][j]+=a.mp[i][k]*b.mp[k][j];
return c;
} inline void pushdown(int x){
if(!tag[x].mp[][]&&!tag[x].mp[][])return;
int l=lc[x],r=rc[x];
tag[l]=tag[l]*tag[x],tag[r]=tag[r]*tag[x],
tag[x]=nul;
}
void insert(int x,int a,int b){
if(L<=a&&R>=b){tag[x]=tag[x]*TAG;return;}
pushdown(x);
int mid=a+b>>;
if(L<=mid)insert(lc[x],a,mid);
if(R>mid)insert(rc[x],mid+,b);
}
void dfss(int x,int a,int b){
if(a==b){an[a]=tag[x].mp[][];return;}
pushdown(x);
int mid=a+b>>;
dfss(lc[x],a,mid),dfss(rc[x],mid+,b);
}
void build(int a,int b){
int x=++tt;tag[x]=nul;
if(a==b)return;
int mid=a+b>>;
lc[x]=tt+,build(a,mid),rc[x]=tt+,build(mid+,b);
} void dfs(int x){
sz[x]=;
for(int i=last[x];i;i=e[i].pre)
fa[e[i].too]=x,dfs(e[i].too),sz[x]+=sz[e[i].too];
}
void dfs2(int x,int chain){
int i,mx=;
bel[x]=chain,dfn[x]=++tim;
for(i=last[x];i;i=e[i].pre)if(sz[e[i].too]>sz[mx])mx=e[i].too;
if(!mx)return;
dfs2(mx,chain);
for(i=last[x];i;i=e[i].pre)if(e[i].too!=mx)dfs2(e[i].too,e[i].too);
}
void run(int x){
while(bel[x]!=bel[])
L=dfn[bel[x]],R=dfn[x],insert(,,n),
x=fa[bel[x]];
L=dfn[bel[]],R=dfn[x],insert(,,n);
} inline void ins(int a,int b){
e[++tot].too=b,e[tot].pre=last[a],last[a]=tot;
}
int main(){
n=read();
for(i=;i<=n;i++)ins(read(),i);
dfs(),dfs2(,);
build(,n);
int id,x,d;
for(m=read();m;m--){
id=read(),x=read(),d=read();TAG=nul;
if(id==)TAG.mp[][]=d;else TAG.mp[][]=d;
run(x);
}
dfss(,,n);
for(i=;i<=n;i++)printf("%lld\n",an[dfn[i]]);
}
还是第一次见这种题。。
[51nod1462]树据结构的更多相关文章
- 51nod-1462: 树据结构
		
[传送门:51nod-1462] 简要题意: 给出一棵n个点的树,每个点有两个权值v,t 有Q个操作,有两种操作: 1.将x到根上的路径上的点的v值都加上d 2.将x到根上的路径上的点的t值都加上每个 ...
 - 51nod1462 树据结构(树链剖分+线段树)
		
这题好久之前就被学长安利了...一直没写珍藏在收藏夹一个不为人知的角落233 这题怎么做...我们来数形结合,横坐标为$t_i$被加的次数(可看作时间$t$),纵坐标为$v_i$,那么$t_i$实际上 ...
 - 【51nod1462】树据结构
		
Source and Judge 51nod1462 Analysis 请先思考后再展开 dffxtz师兄出的题 做法一:暴力树剖+分块,时间复杂度为 $O(nlognsqrt n)$ 做法二:利用矩 ...
 - 树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示
		
树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:pa ...
 - 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限
		
大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...
 - 由简入繁实现Jquery树状结构
		
在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一些插件,也是可以实现这些效果的,比 ...
 - php实现树状结构无级分类
		
php实现树状结构无级分类 ).",'树2-1-1-2')";mysql_query($sql);?>
 - Android无限级树状结构
		
通过对ListView简单的扩展.再封装,即可实现无限层级的树控件TreeView. package cn.asiontang.nleveltreelistview; import android.a ...
 - dzzoffice的树型结构用户管理设计
		
在DzzOffice1.1的开发中,针对用户使用群体重新设计了,机构.部门.用户管理应用. 传统OA,企业相关程序,一般是设置机构-设置部门-设置职位-添加用户这样的步骤.每个步骤分为不同的管理界面. ...
 
随机推荐
- 关于Sublime Text编辑器的实用技巧
			
本文转载至一篇博文,为您提供Sublime Text编辑器的12个技巧和诀窍,深入挖掘这个看似简洁的代码编辑器,背后所隐藏的实现各种高级功能的无限可能. 1) 选择 以下是一些Sublime Text ...
 - 在IntelliJ IDEA里创建简单的基于Maven的SpringMVC项目
			
后来发现了一种更加方便的创建方式,即第一步不选择Create from archetype,创建完毕后打开Project Structure-Modules,然后添加Web,但是注意添加的Web里面的 ...
 - MySQL in or效率对比
			
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/60 考虑如下两个sql: select * from table ...
 - 向map中追加元素
			
public class Demo01 { public static void main(String[] args) { String mapKey = "a"; Map< ...
 - 滚动条大于120px时,判断pc端的情况下,导航条固定定位
			
//滚动条大于120px时,判断pc端的情况下,导航条固定定位 $(window).scroll(function(){ var viewWidth=$(document).width() var ...
 - K:HashMap中hash函数的作用
			
在分析了hashCode方法和equals方法之后,我们对hashCode方法和equals方法的相关作用有了大致的了解.在通过查看HashMap类的相关源码的时候,发现其中存在一个int has ...
 - Head First设计模式之观察者模式
			
一.定义 观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新. 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多 ...
 - 企业网盘: Owncloud 搭建
			
说明:搭建很简单,就是一个lamp环境,但是最新的owncloud 9.x版本对php的版本需求不能低于5.4, 所以需要下载yum源来进行安装. 搭建过程 1)配置yum源 rpm -Uvh htt ...
 - jQuery 选择器 (一)
			
选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $( ...
 - 19 Zabbix 利用Scripts栏目对Hosts远程执行命令
			
点击返回:自学Zabbix之路 19 Zabbix 利用Scripts栏目对Hosts远程执行命令 在Monitoring板块中,有Host出现的地方,单击Host按钮后,都可以执行对Host远程执行 ...