传送门

动态点分治模板题

结果点分树建挂了。。。。

#include<bits/stdc++.h>
using namespace std;
const int RLEN=1<<20|1;
inline char gc(){static char ibuf[RLEN],*ib,*ob;(ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ob==ib)?EOF:*ib++;
}
#define gc getchar
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
#define ll long long
#define re register
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define cs const
#define bg begin
#define poly vector<int>
inline void chemx(int &a,int b){a<b?a=b:0;}
inline void chemn(int &a,int b){a>b?a=b:0;}
cs int N=100005;
struct Bit{vector<int> tr;int n;inline void init(int _n){n=_n+1,tr.resize((n+1)<<2,0);}#define lb(x) (x&(-x))inline void update(int p,int k){p++;p=min(p,n);for(;p>=1;p-=lb(p))tr[p]+=k;}inline int query(int p,int res=0){p++;if(p<=0)return 0;for(;p<=n;p+=lb(p))res+=tr[p];return res;}
};
Bit f1[N],f2[N];
int n,m,maxn,rt;
int siz[N],son[N],vis[N];
vector<pii> fa[N];
vector<int> e[N];
void getrt(int u,int f){siz[u]=1,son[u]=0;for(int i=0;i<e[u].size();i++){int v=e[u][i];if(v==f||vis[v])continue;getrt(v,u),siz[u]+=siz[v];chemx(son[u],siz[v]);}son[u]=max(son[u],maxn-siz[u]);if(son[u]<son[rt])rt=u;
}
int mxdep;
void getdep(int u,int f,int dep){chemx(mxdep,dep);for(int i=0;i<e[u].size();i++){int v=e[u][i];if(v==f||vis[v])continue;getdep(v,u,dep+1);}
}
inline void init(Bit &x,int u,int dep){mxdep=0;getdep(u,0,dep);x.init(mxdep);
}
void givefa(int u,int f,int dep,int ff){fa[u].pb(pii(ff,dep));for(int i=0;i<e[u].size();i++){int v=e[u][i];if(v==f||vis[v])continue;givefa(v,u,dep+1,ff);}
}
void solve(int u,int f){vis[u]=1;init(f1[u],u,0),givefa(u,0,0,u);for(int i=0;i<e[u].size();i++){int v=e[u][i];if(vis[v])continue;maxn=siz[v]>siz[u]?siz[f]-siz[u]:siz[v];getrt(v,rt=0),init(f2[rt],v,1);solve(rt,u);}
}
inline int query(int u){int res=0;pii x;for(int i=fa[u].size()-1;~i;i--){x=fa[u][i];res+=f1[x.fi].query(x.se);}for(int i=fa[u].size()-1;i;i--){res-=f2[fa[u][i].fi].query(fa[u][i-1].se);}return res;
}
inline void update(int u,int d,int k){pii x;for(int i=(int)fa[u].size()-1;~i;i--){x=fa[u][i];f1[x.fi].update(d-x.se,k);}for(int i=(int)fa[u].size()-1;i;i--){f2[fa[u][i].fi].update(d-fa[u][i-1].se,k);}
}
char op[4];
int main(){n=read(),m=read();for(int i=1;i<n;i++){int u=read(),v=read();e[u].pb(v),e[v].pb(u);}siz[0]=son[0]=maxn=n;getrt(1,rt=0);solve(rt,0);while(m--){scanf("%s",op+1);int x=read();if(op[1]=='Q'){cout<<query(x)<<'\n';}else{int d=read(),w=read();update(x,d,w);}}
}

【BZOJ4372】—烁烁的游戏(动态点分治)相关推荐

  1. [BZOJ4372][烁烁的游戏][动态树分治+线段树+LCA]

    [BZOJ4372][烁烁的游戏][动态树分治+线段树+LCA] 题目大意: 给定一颗nn个节点的树,边权均为11,初始每个点权值为00 . 其中操作QQ xx询问x点的点权,操作 MM xx dd ...

  2. bzoj4372 烁烁的游戏 动态点分治+线段树

    Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠. 给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠. 烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w只皮皮鼠 ...

  3. BZOJ4372: 烁烁的游戏(动态点分治)

    Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠. 题意: 给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠. 烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w ...

  4. 【BZOJ4372】烁烁的游戏 动态树分治+线段树

    [BZOJ4372]烁烁的游戏 Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠. 题意: 给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠. 烁烁他每次会跳到一个节点u,把周围 ...

  5. 【bzoj4372】烁烁的游戏 动态点分治+线段树

    题目描述 给一颗n个节点的树,边权均为1,初始点权均为0,m次操作: Q x:询问x的点权. M x d w:将树上与节点x距离不超过d的节点的点权均加上w. 输入 第一行两个正整数:n,m 接下来的 ...

  6. bzoj 4372: 烁烁的游戏 动态点分治_树链剖分_线段树

    [Submit][Status][Discuss] Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠. 题意: 给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠. 烁烁他每次会跳 ...

  7. bzoj 4372 烁烁的游戏 —— 动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 本以为和 bzoj3730 一样,可以直接双倍经验了: 但要注意一下,树状数组不能查询 ...

  8. bzoj 4372 烁烁的游戏——动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 和 bzoj 3070 震波 是一个套路.注意区间修改的话,树状数组不能表示 dis ...

  9. [bzoj4372]烁烁的游戏

    [bzoj4372]烁烁的游戏 动态点分,需要注意的是我们对于每个点要开两个数组,另外一个相当于一个容斥,即把他父亲上的减掉. 代码 #include<bits/stdc++.h> usi ...

  10. BZOJ4372: 烁烁的游戏

    BZOJ4372: 烁烁的游戏 https://lydsy.com/JudgeOnline/problem.php?id=4372 分析: 不是很难想的一道题,用树状数组维护点分树上每一层分治中心的点 ...

最新文章

  1. 永洪Desktop安装——windows版
  2. 数字信号处理-C语言数字信号的产生
  3. mysql 乐观锁_使用Mysql乐观锁解决并发问题
  4. Substitute Algorithm(替换算法)
  5. python绘制剖面图_用python绘制剖面图
  6. BJFU-ACM 12月8日月赛官方题解
  7. Hbase实用技巧:全量+增量数据的迁移方法
  8. Succinctly 中文系列教程(二) 20220109 更新
  9. mysql socket tcp udp_TCP、UDP、HTTP、SOCKET之间的区别
  10. 查找一个数据库内的所有表的行数
  11. MTK: mtk 10A 建立socket连接问题
  12. git提交注释内容分行处理
  13. iphone7无服务_iPhone 7 系列被召回?设计缺陷...
  14. OpenCV DNN调用训练好的caffe 模型(目标检测)
  15. android SDK安装以及环境变量配置(windows)
  16. 如何在Excel批量查询电话号码归属地?
  17. EpiDope:用于线性B细胞表位预测的深度神经网络
  18. 初学者如何快速练习盲打
  19. 2020年排名前10的Python库
  20. jQuery 选择器 选取第一个 p 元素

热门文章

  1. 【橙子】C#Unity--2D迷宫
  2. 汇兑损益中间科目,系统情况
  3. 光纤快速连接器如何安装使用?与冷接子有何区别?
  4. Android 备份(提取)apk
  5. 【以太坊】ubuntu安装以太坊ethereum的测试网络ropsten-net以及雷电网络raiden-network环境
  6. Python SyntaxError: Missing parentheses in call to 'print'
  7. Java 本地接口(JNI)编程指南和规范学习笔记2
  8. IAR代码溢出问题处理section placement failed
  9. 2020web前端学习路线(附全套前端视频教程+教学大纲
  10. python实现图像白平衡