博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51Nod 1199 - Money out of Thin Air(树链剖分)
阅读量:5114 次
发布时间:2019-06-13

本文共 1760 字,大约阅读时间需要 5 分钟。

【题目描述】

在这里插入图片描述
【思路】
树链剖分,两次dfs将重链转换成连续区间,然后用线段树维护区间和

#include
#define node tree[id]#define lson tree[id<<1]#define rson tree[id<<1|1]using namespace std;typedef long long ll;const int maxn=50005;struct Tree{ int left,right; ll lazy,sum;};int n,m,cnt;int w[maxn];vector
g[maxn];int f[maxn],d[maxn],num[maxn],son[maxn];int id[maxn],eid[maxn],rk[maxn],top[maxn];Tree tree[maxn<<2];void dfs(int u,int fa,int dep){ d[u]=dep; num[u]=1; for(int i=0;i
>1; build(id<<1,le,mid); build(id<<1|1,mid+1,ri); pushup(id);}ll query(int id,int le,int ri){ if(node.left==le && node.right==ri){ return node.sum; } pushdown(id); int mid=(node.left+node.right)>>1; if(ri<=mid) return query(id<<1,le,ri); else if(le>mid) return query(id<<1|1,le,ri); else return query(id<<1,le,mid)+query(id<<1|1,mid+1,ri);}void update(int id,int le,int ri,ll val){ if(node.left==le && node.right==ri){ node.sum+=val*(node.right-node.left+1); node.lazy+=val; return; } pushdown(id); int mid=(node.left+node.right)>>1; if(ri<=mid) update(id<<1,le,ri,val); else if(le>mid) update(id<<1|1,le,ri,val); else{ update(id<<1,le,mid,val); update(id<<1|1,mid+1,ri,val); } pushup(id);}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n-1;++i){ scanf("%d%d",&f[i],&w[i]); son[i]=-1; int u=i,v=f[i]; g[u].push_back(v); g[v].push_back(u); } f[0]=son[0]=-1; dfs(0,-1,0); dfs2(0,0); build(1,1,n); while(m--){ char op[2]; int x,y,z; scanf("%s%d%d%d",op,&x,&y,&z); if(op[0]=='S'){ ll now=query(1,id[x],id[x]); if(now

转载于:https://www.cnblogs.com/wafish/p/10465130.html

你可能感兴趣的文章
文件上传
查看>>
Mysql主从同步(复制)
查看>>
SQL利用Case When Then多条件判断
查看>>
2018-2019-1 20189215 书籍速读
查看>>
虚拟主机安全配置方法
查看>>
Git-分支管理
查看>>
python 中出现 “IndentationError: expected an indented block” 问题
查看>>
异常处理的资料
查看>>
寒假作业01
查看>>
iOS - 应用程序国际化
查看>>
H5智能表单
查看>>
[转]MBTiles 1.2 规范翻译
查看>>
C# 创建ACCESS数据库(转载)
查看>>
Excel批量导入数据库
查看>>
Asp.net 5学习
查看>>
爬虫入门----小说下载(静态网页的文字爬取)
查看>>
最小覆盖圆的神奇算法及例题
查看>>
BZOJ 4804: 欧拉心算
查看>>
JS访问Struts 2 ValueStack中的内容
查看>>
apicloud实现各种自定义弹层组件
查看>>