P4556 [Vani有约会]雨天的尾巴(线段树合并+lca)
每个操作拆成4个进行树上差分,动态开点线段树维护每个点的操作。
离线处理完向上合并就好了
luogu倍增lca被卡了5分.....于是用rmq维护....
常数很大,被bzoj卡了(但是我不想改了)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define ri register int
using namespace std;
int read(){
char c=getchar(); int x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+c-,c=getchar();
return x;
}
#define N 100001
#define W 5000005
int n,m,fa[N],fir[N],Log[N*],f[][N*],tp,dfn[N],cc,ans[N];//一定记住st表的大小是n*2
int u,rt[N],lc[W],rc[W],mx[W],id[W];
vector <int> g[N];
#define mid (l+r)/2
void up(int o){
mx[o]=id[o]=;
if(mx[lc[o]]>mx[o]) mx[o]=mx[lc[o]],id[o]=id[lc[o]];
if(mx[rc[o]]>mx[o]) mx[o]=mx[rc[o]],id[o]=id[rc[o]];
}
void merge(int &o,int p,int l,int r){//线段树合并
if(!o||!p){o=o+p; return;}
if(l==r){mx[o]+=mx[p]; return;}
merge(lc[o],lc[p],l,mid);
merge(rc[o],rc[p],mid+,r); up(o);
}
void ins(int &o,int l,int r,int k,int v){
if(!o)o=++u;
if(l==r){mx[o]+=v,id[o]=l; return;}
if(k<=mid) ins(lc[o],l,mid,k,v);
else ins(rc[o],mid+,r,k,v);
up(o);
}
void dfs(int x,int Fa){
fa[x]=Fa; f[][++tp]=dfn[++cc]=x; fir[x]=tp;
for(int i=;i<g[x].size();++i) if(g[x][i]!=Fa) dfs(g[x][i],x),f[][++tp]=x;
}
inline int Min(int x,int y){return fir[x]<fir[y]?x:y;}
int lca(int x,int y){
ri l=fir[x],r=fir[y]; if(l>r) swap(l,r);
ri k=Log[r-l+];
return Min(f[k][l],f[k][r-(<<k)+]);
}
int main(){
n=read(); m=read(); int u,v,w,p;
for(ri i=;i<n;++i){
u=read(),v=read();
g[u].push_back(v);
g[v].push_back(u);
}dfs(,); Log[]=-;
for(ri i=;i<=tp;++i) Log[i]=Log[i>>]+;
for(ri i=;i<=Log[tp];++i)
for(ri j=;j+(<<i)-<=tp;++j)
f[i][j]=Min(f[i-][j],f[i-][j+(<<(i-))]);
while(m--){
u=read(),v=read(),w=read(); p=lca(u,v);
ins(rt[u],,N-,w,);
ins(rt[v],,N-,w,);
ins(rt[p],,N-,w,-);
if(fa[p]) ins(rt[fa[p]],,N-,w,-);//拆成4个操作
}
for(ri i=n;i;--i)
p=dfn[i],ans[p]=id[rt[p]],merge(rt[fa[p]],rt[p],,N-);
for(ri i=;i<=n;++i) printf("%d\n",ans[i]);
return ;
}
P4556 [Vani有约会]雨天的尾巴(线段树合并+lca)的更多相关文章
- 洛谷P4556 [Vani有约会]雨天的尾巴(线段树合并)
题目背景 深绘里一直很讨厌雨天. 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切. 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以及田地 ...
- [Vani有约会]雨天的尾巴 线段树合并
[Vani有约会]雨天的尾巴 LG传送门 线段树合并入门好题. 先别急着上线段树合并,考虑一下这题的暴力.一看就是树上差分,对于每一个节点统计每种救济粮的数量,再一遍dfs把差分的结果统计成答案.如果 ...
- P4556 [Vani有约会]雨天的尾巴 (线段树合并)
P4556 [Vani有约会]雨天的尾巴 题意: 首先村落里的一共有n座房屋,并形成一个树状结构.然后救济粮分m次发放,每次选择两个房屋(x,y),然后对于x到y的路径上(含x和y)每座房子里发放一袋 ...
- 洛谷 P4556 [Vani有约会]雨天的尾巴 解题报告
P4556 [Vani有约会]雨天的尾巴 题目背景 深绘里一直很讨厌雨天. 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切. 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒 ...
- [题解] P4556 [Vani有约会]雨天的尾巴
[题解] P4556 [Vani有约会]雨天的尾巴 ·题目大意 给定一棵树,有m次修改操作,每次修改 \(( x\) \(y\) \(z )\) 表示 \((x,y)\) 之间的路径上数值 \(z\) ...
- 2018.08.28 洛谷P4556 [Vani有约会]雨天的尾巴(树上差分+线段树合并)
传送门 要求维护每个点上出现次数最多的颜色. 对于每次修改,我们用树上差分的思想,然后线段树合并统计答案就行了. 注意颜色很大需要离散化. 代码: #include<bits/stdc++.h& ...
- P4556 [Vani有约会]雨天的尾巴(线段树合并)
传送门 一道线段树合并 首先不难看出树上差分 我们把每一次修改拆成四个,在\(u,v\)分别放上一个,在\(lca\)和\(fa[lca]\)各减去一个,那么只要统计一下子树里的总数即可 然而问题就在 ...
- P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并 (树上差分+线段树合并)
显然的树上差分问题,最后要我们求每个点数量最多的物品,考虑对每个点建议线段树,查询子树时将线段树合并可以得到答案. 用动态开点的方式建立线段树,注意离散化. 1 #include<bits/st ...
- 洛咕 P4556 [Vani有约会]雨天的尾巴
终于把考试题清完了...又复活了... 树上差分,合并用线段树合并,但是空间会炸. 某大佬:lca和fa[lca]减得时候一定已经存在这个节点了,所以放进vector里,合并完之后减掉就好了... 玄 ...
随机推荐
- Linux培训教程 linux中nl命令使用介绍
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...
- POJ 2155 Matrix (树状数组 && 区间计数)
题意 : 给出一个N*N的矩阵, 矩阵只有可能包含0或1, 一开始则全部是0.对于矩阵可以进行两种操作, 第一种是输入 C x1 y1 x2 y2 表示, 对以(x1, y1)为左上角, 以(x2, ...
- FJWC2017&FJOI2017一试 游记
day1 早上是以前泉州七中的杨国烨讲课.(据说当时看新闻说是一对双胞胎一起上thu的其中一个)课题是图论/网络流. 下午第一道一开始推出来了一个之和面积有关的式子,然后觉得可以容斥一发,觉得 ...
- 【bzoj2763】[JLOI2011]飞行路线
*题目描述: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一 ...
- Pycharm,出现Invalid VCS root mapping The directory 解决方法
Pycharm File 中setting-------version control 中VCS选择none 后选择ok 执行完以上的步骤,还错误就会消失.
- Android使用SDKManager下载SDK速度慢 容易丢包和异常的解决办法
第一步, SDK Manager启动之后,会先解析一些google的xml文件,会在Log里面打印出一些日志信息. 解析完之后,把日志全部拷贝到一个记事本里(这一步是因为日志窗口不支持查找),在里面查 ...
- qtp识别验证码
花了两天时间才完整的完成识别验证码的登录操作,在网上看到很多关于验证码识别的方法,但是我用的qtp版本比较高级,所以还是要自己花心思研究.po上我的识别验证码的详细历程: 一.读取浏览器中的图片验证码 ...
- Windows操作系统Apache服务器下配置PHP
在Apache web服务器上发布PHP项目之前,需要进行相应的配置,服务器才能解析php文本,正常显示php动态页面内容.在进行php配置之前默认已经在Windows系统下安装好了Apache服务器 ...
- 关于spotlight_on_oracle的配置及操作
Spotlight是一个强有力的Oracle数据库实时性能诊断工具,提供了一个直观的.可视化的数据库活动展现.Spotlight可视化展现性能瓶颈,一旦某个指标超出可接受的阀值的话.而且,通过下钻功能 ...
- 从输入url到页面展现的过程
先看一幅图:(下面的所有图我都进行拉伸压缩了 如果看不到 可以右键复制图片地址 然后到浏览器粘贴查看 不然显示不全图片) mac没有画图软件 不好意思 xmind做的 1. 输入网址 当 ...