BZOJ 4034 BIT & Dfs序
调了恒久突然发现输出优化忘记带负号了..
就是差分树状数组维护Dfs序即可。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std; inline void Get_Int(LL &x)
{
x=; char ch=getchar(); LL f=;
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();} x*=f;
}
inline void Put_Int(LL x)
{
char ch[]; LL top=;
if (x<) putchar('-'),x=-x;
if (x==) ch[++top]='';
while (x) ch[++top]=x%+'',x/=;
while (top) putchar(ch[top--]); putchar('\n');
}
//=============================================
const LL Maxn=;
LL Begin[Maxn],End[Maxn],c[Maxn],cv[Maxn],a[Maxn];
LL head[Maxn],dep[Maxn];
bool vis[Maxn];
LL u,v,w,n,m,Type,cnt,tot;
struct Edge{LL to,next;}edge[Maxn<<];
inline LL lowbit(LL x) {return x&(-x);}
struct BIT
{
LL c[Maxn];
inline void Add(LL x,LL v) {for (LL i=x;i<=n;i+=lowbit(i)) c[i]+=v;}
inline LL Sum(LL x) {LL ret=; for (LL i=x;i;i-=lowbit(i)) ret+=c[i]; return ret;}
inline void Interval(LL x,LL y,LL w) {Add(x,w),Add(y+,-w);}
}Bit1,Bit2;
inline void AddE(LL u,LL v)
{edge[cnt].to=v;edge[cnt].next=head[u];head[u]=cnt++;} void Dfs(LL u)
{
Begin[u]=++tot; vis[u]=true;
for (LL i=head[u];i!=-;i=edge[i].next)
if (!vis[edge[i].to])
dep[edge[i].to]=dep[u]+,Dfs(edge[i].to);
End[u]=tot;
} inline void Modify_Point()
{Get_Int(u),Get_Int(w);Bit1.Interval(Begin[u],End[u],w);}
inline void Modify_Tree()
{Get_Int(u),Get_Int(w);Bit1.Interval(Begin[u],End[u],(-dep[u])*w);Bit2.Interval(Begin[u],End[u],w);}
inline LL Query()
{Get_Int(u);return Bit1.Sum(Begin[u])+Bit2.Sum(Begin[u])*dep[u];} int main()
{
Get_Int(n),Get_Int(m);
for (LL i=;i<=n;i++) Get_Int(a[i]);
memset(head,-,sizeof(head)); tot=;
for (LL i=;i<n;i++)
Get_Int(u),Get_Int(v),AddE(u,v),AddE(v,u);
memset(vis,false,sizeof(vis)); Dfs();
for (LL i=;i<=n;i++) Bit1.Interval(Begin[i],End[i],a[i]);
for (LL i=;i<=m;i++)
{
Get_Int(Type);
if (Type==) Modify_Point();
if (Type==) Modify_Tree();
if (Type==) Put_Int(Query());
}
return ;
}
C++
BZOJ 4034 BIT & Dfs序的更多相关文章
- [BZOJ 2819]NIM(dfs序维护树上xor值)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2819 分析: 树上的nim游戏,关键就是要判断树上的一条链的异或值是否为0 这个题目有 ...
- BZOJ 3083: 遥远的国度 dfs序,树链剖分,倍增
今天再做一天树的题目,明天要开始专攻图论了.做图论十几天之后再把字符串搞搞,区域赛前再把计几看看. 3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 128 ...
- BZOJ 2819: Nim dfs序维护树状数组,倍增
1.随机选两个堆v,u,询问若在v到u间的路径上的石子堆中玩Nim游戏,是否有必胜策略,如果有,vfleaking将会考虑将这些石子堆作为初始局面之一,用来坑玩家.2.把堆v中的石子数变为k. 分析: ...
- BZOJ 1103 大都市(dfs序+树状数组)
应该是一道很水的题吧... 显然可以用树链剖分解决这个问题,虽然不知道多一个log会不会T.但是由于问题的特殊性. 每次修改都是将边权为1的边修改为0,且询问的是点i到根节点的路径长度. 令点i到根节 ...
- BZOJ 4154 kd-tree dfs序 + 二维空间的区间(矩阵)更新单点查找
一开始没思路 感觉像是一个树形dp 然而不会 然后看了一眼题解就明白了 一个点的子树 用dfs序表示肯定是一个连续的区间 并且由于有子树的距离限制 可以转化为一个深度的区间 于是每个点都会有一个在二维 ...
- BZOJ 3653: 谈笑风生(DFS序+可持久化线段树)
首先嘛,还是太弱了,想了好久QAQ 然后,这道题么,明显就是求sigma(size[x]) (x是y的儿子且层树小于k) 然后就可以发现:把前n个节点按深度建可持久化线段树,就能用前缀和维护了 其实不 ...
- BZOJ 2238: Mst DFS序+KDtree
明明可以用二维数点来做啊,网上为什么都是树剖+线段树呢 ? code: #include <cstdio> #include <cstring> #include <al ...
- Bzoj 4034: [HAOI2015]T2 树链剖分,子树问题,dfs序
4034: [HAOI2015]T2 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1841 Solved: 598[Submit][Status] ...
- bzoj 4034(DFS序+线段树)
这个题多了一个操作难度直线上升,看完题解才会写 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 ...
随机推荐
- Unity-Animator深入系列总索引
花了不少时间完成了这篇Unity Animator学习系列文章,其中大多数内容都来自个人实践,包括API部分很多都是亲测,期望和网上的诸多教程达到互补. 相关参考文档 Unity Animator官方 ...
- HDU Machine scheduling
Machine scheduling Time Limit : 5000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- C中测试时间代码
- consul笔记-集群加入的问题
加入集群的问题 1 只有2个server的时候,一个挂掉,不会选举出新的leader. 2 使用 -bootstrap 可以直接启动为leader,这和-bootstrap-expect 是有区别的 ...
- C#定时执行一个操作
一个客户端向服务器端socket发送报文,但是服务器端限制了发送频率,假如10秒内只能发送1次,这时客户端也要相应的做限制,初步的想法是在配置文件中保存上次最后发送的时间,当前发送时和这个上次最后时间 ...
- 被table单元格colspan属性折磨了
基础知识不牢固,被colspan折磨了很长时间 table里面的td使用colspan前提条件是所跨的单元格宽度必须一样,不然显示效果会是属性不起作用或直接导致表格变形,下面的例子可以看出效果 < ...
- Http-Only Cookie
设置Cookie的时候,如果服务器加上了HttpOnly属性,则这个Cookie无法被JavaScript读取(即document.cookie不会返回这个Cookie的值),只用于向服务器发送. S ...
- Python--关于连接符+
连接符 + 连接符 + 实则是创建了新的对象并占用新的内存(dict.set不能使用) String 由于Python必须为每一个使用连接符+的字符串分配新的内存,并产生新的字符串.下面两种方式会更有 ...
- 004_kafka_安装运行
1.下载和安装 目前kafka的稳定版本为0.10.0.0 下载地址:http://kafka.apache.org/downloads.html 下载后解压缩安装包到系统即可完成安装 > ta ...
- c语言完成分块查找
首先要把一系列数组均匀分成若干块(最后一个可以不均匀) 每块中元素任意排列,即块中数字无序,但是整个块之间要有序.因此也存在局限性. #include<stdio.h> //分块查找法 v ...