博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4034 树上操作
阅读量:5210 次
发布时间:2019-06-14

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

熟练剖分

不想写树剖怎么办QwQ

维护每个点\(Ans\)
操作\(1\)就是子树加
操作\(2\)是操作\(1\)的叠加......
认真分析......
子树加\(dep\)!!!

写个树状数组节省一下码量

(节省了还是100+)
(我选择死亡)

#include 
const int MAXN=100111;int N, M;int X;long long op;long long Ans;struct Vert{ int FE; int Dps, Dpr; int Dep; long long Val, Sum;} V[MAXN];struct Edge{ int x, y, next;} E[MAXN<<1];int Ecnt;void addE(int a, int b){ ++Ecnt; E[Ecnt].x=a;E[Ecnt].y=b;E[Ecnt].next=V[a].FE;V[a].FE=Ecnt;}int Dfn[MAXN], DFN;void DFS(int at, int f=0){ ++DFN; Dfn[DFN]=at; V[at].Dps=DFN; for(int k=V[at].FE, to;k>0;k=E[k].next){ to=E[k].y; if(to==f) continue; V[to].Dep=V[at].Dep+1; V[to].Sum=V[at].Sum+V[to].Val; DFS(to, at); } V[at].Dpr=DFN;}int lowbit(int a){ return a&(-a);}struct Trray{ int L; long long n[MAXN]; void init(int l){ L=l; for(int i=0;i
0;i-=lowbit(i)) ret+=n[i]; return ret; } void Update(int l, int r, long long d){ for(int i=l;i<=L;i+=lowbit(i)) n[i]+=d; for(int i=r+1;i<=L;i+=lowbit(i)) n[i]-=d; }} Cv, Cd;int main(){ scanf("%d%d", &N, &M); for(int i=1;i<=N;++i) scanf("%lld", &V[i].Val); for(int i=1, a, b;i

转载于:https://www.cnblogs.com/Pickupwin/p/9545222.html

你可能感兴趣的文章
Linux服务部署:nginx服务 nfs服务
查看>>
Spring Boot热部署(springloader)
查看>>
我要写一篇动态计算tableView-cell高度的随笔
查看>>
2.2 数据库高速缓冲区
查看>>
开启Golang编程第一章
查看>>
Java技术——I/O知识学习
查看>>
Android5.0之CoordinatorLayout的使用
查看>>
JS实践与写博客-序
查看>>
斗地主算法的设计与实现(五)--洗牌和发牌
查看>>
《mysql必知必会》笔记
查看>>
protocol buffer的简单使用
查看>>
ntpdate
查看>>
Django内置模块auth实现认证功能代码
查看>>
面试分享:一年经验初探阿里巴巴前端社招
查看>>
Java - TreeSet源码解析
查看>>
分享成为高效程序员的7个重要习惯(转载)
查看>>
Linux 分区挂载方案
查看>>
【快速幂】2011
查看>>
枚举类型或运算
查看>>
Socket编程:UDP和TCP概论及案例
查看>>