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里,合并完之后减掉就好了... 玄 ...
随机推荐
- quartz的配置文件说明
# Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if ...
- sh_09_打印多条分隔线
sh_09_打印多条分隔线 def print_line(char, times): """打印单行分隔线 :param char: 分隔字符 :param times: ...
- cmd命令行的FTP使用
进入ftp:ftp 打开连接:open 192.168.1.106 2121 用户名空:none 密码空:不用输入,直接回车 查询远程服务器当前路径:pwd 显示远程服务器当前路径下的文件:dir 远 ...
- Httpwatch抓包
一.下载Httpwatch 二.抓包 1.启动Httpwatch 打开浏览器-选择工具-Httpwatch professional(仅适用于IE和火狐40及以下浏览器) 2.开始抓包 点击“Reco ...
- JS将页面中表格,导出到Excel中(IE中)
原文地址:http://blog.csdn.net/sinat_15114467/article/details/51098522 var idTmr; function getExplorer() ...
- c++实验8 哈夫曼编码-译码器
哈夫曼编码-译码器 此次实验的注释解析多加不少---若对小伙伴们有帮助 希望各位麻烦点个关注 多谢 1.哈夫曼树构造算法为: (1)由给定的n个权值{w1,w2,…,wn}构造n棵只有根结点的二叉树, ...
- jest 提示 Unexpected identifier 的解决方案
概述 今天在玩 jest 的时候,发现用 import 就会报 Unexpected identifier 的错误.查了很久的资料,最后终于解决了. 参考资料:Jest tests can't pro ...
- WCF 配置说明
关于WCF中的地址和绑定,需要补充一下. WCF中支持的传输协议包括HTTP.TCP.Peer network(对等网).IPC(基于命名管道的内部进程通信)以及MSMQ(微软消息队列),每个协议对应 ...
- Python Module_Socket_网络编程
目录 目录 Socket 套接字 套接字的原理 套接字的数据处理方式 套接字类型 Socket 标准函数 ServerSocket 标准函数 ClientSocket 标准函数 公有标准函数 Sock ...
- Jmeter之if控制器
在使用中,一些操作可以执行,需要满足一些特定的条件,这个时候就可以使用if控制器去控制. 一.界面显示 二.配置说明 1.名称:标识,建议设置为判断的功能 2.注释:说明 3.条件:是指需要满足那种条 ...