首页| 新闻| 娱乐| 游戏| 科普| 文学| 编程| 系统| 数据库| 建站| 学院| 产品| 网管| 维修| 办公| 热点
给出一棵有根树,一开始每个节点都有一个权值。要求资瓷三个操作: S x delta节点x的权值增加delta M x delta以x为根的子树的所有节点的权值增加delta Q x询问(∑lca(p,q)==xv[p]+v[q])/(∑lca(p,q)==x) n,m<=300000
一开始觉得nlog2的算法过不了,其实跑的飞快。 因为这题涉及到子树和祖先的修改和询问,所以直接就想到了树剖。 分母上的值显然可以预处理,那么我们就考虑如何维护分子上的值。 设sum[x]表示以x为根的子树的权值和,那么分子上的值显然就等于v[x]∗(size[x]−1)+∑fa[y]==xsum[y]∗(size[x]−size[y]) 我们直接用一个ans数组记录每个节点的答案,现在考虑修改。 首先先用线段树维护树剖。用一个数组nx[x]表示x所在的重链中x的子节点,没有则为0 对于一个S操作,先修改当前点的答案,然后考虑如何维护其祖先的答案。 对于一条需要修改的重链,除了其第一个节点外,不难发现其余节点的答案所修改的权值就是delta*(size[x]-size[nx[x]]),那么就可以先修改每条链的第一个点,其余节点就可以在线段树上打标记啦。M操作除了先修改其子树的答案然后把delta变为size[x]*delta其余同理。
索泰发布一款GTX 1070 Mini迷
AMD新旗舰显卡轻松干翻NVIDIA
索泰发布一款GTX 1070 Mini迷你版本:小机
芭蕾舞蹈表演,真实美到极致
下午茶时间,悠然自得的休憩
充斥这繁华奢靡气息的城市迪拜风景图片
从山间到田野再到大海美丽的自然风景图片
肉食主义者的最爱美食烤肉图片
夏日甜心草莓美食图片
人逢知己千杯少,喝酒搞笑图集
搞笑试卷,学生恶搞答题
新闻热点
疑难解答
图片精选
Dictionary数据类型在Darwin视频服
可穿戴手势识别控制器
网友关注