dep【1】必须初始化

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+15;
#define pb push_back
vector<int>E[N];
int n,m;
int dep[N],f[N][25];
void dfs(int u,int fa){for(auto v:E[u])if(v!=f[u][0]){dep[v]=dep[u]+1;f[v][0]=u;dfs(v,u);}
}
void st(){for(int j=1;j<=20;j++)for(int i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1];
}
int lca(int x,int y){if(dep[x]<dep[y])swap(x,y);for(int i=log2(n);i>=0;i--){if(dep[f[x][i]]>=dep[y])x=f[x][i];}if(x==y)return x;for(int i=log2(n);i>=0;i--){if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];}return f[x][0];
}
int tr[N*55],lson[N*55],rson[N*55],tot[N*55],id[N*55];
int cnt;
void pushup(int k){if(tot[lson[k]]>=tot[rson[k]]){id[k]=id[lson[k]];tot[k]=tot[lson[k]];}else{id[k]=id[rson[k]];tot[k]=tot[rson[k]];}
}
void insert(int &k,int l,int r,int pos,int del){if(!k)k=++cnt;if(l==r){tot[k]+=del;//cout<<tot[k]<<endl;id[k]=l;return;}int mid=l+r>>1;if(pos<=mid)insert(lson[k],l,mid,pos,del);if(pos>mid)insert(rson[k],mid+1,r,pos,del);pushup(k);
}
void merge(int &x,int y,int l,int r){if(!x||!y){x=x+y;return;}if(l==r){tot[x]+=tot[y];id[x]=l;//因为有可能当前节点是空的,所以还是需要的return;}int mid=l+r>>1;merge(lson[x],lson[y],l,mid);merge(rson[x],rson[y],mid+1,r);pushup(x);
}
int query(int k,int l,int r){if(!tot[k])return 0;return id[k];
}
int ans[N];
void dfs_ans(int u,int fa){for(auto v:E[u])if(v!=f[u][0]){dfs_ans(v,u);merge(tr[u],tr[v],1,N);}ans[u]=query(tr[u],1,N);
}int main(){ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m;for(int i=1;i<n;i++){int u,v;cin>>u>>v;E[u].pb(v);E[v].pb(u);}dep[1]=1;//这个不加wa四个点dfs(1,0);st();for(int i=0;i<m;i++){int x,y,z;cin>>x>>y>>z;int ft=lca(x,y);insert(tr[x],1,N,z,1);insert(tr[y],1,N,z,1);insert(tr[ft],1,N,z,-1);if(f[ft][0])//+++insert(tr[f[ft][0]],1,N,z,-1);}dfs_ans(1,0);for(int i=1;i<=n;i++)cout<<ans[i]<<'\n';
}

P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并相关推荐

  1. 洛谷 - P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并(树上差分+线段树合并)

    题目链接:点击查看 题目大意:给出一棵树,再给出 m 次操作,每次操作会选择两个点 ( x , y ) ,使得这条路径上的所有点的种类 z 加一,最后问每个点的哪个种类出现的频率最高,若多个种类出现频 ...

  2. 线段树分裂与合并 ---- 树上差分 P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并

    题目链接 解题思路: 首先题目是对u,vu,vu,v这两条路径上面添加一个zzz,然后运用树上点的差分思想,对于分发路径u,vu,vu,v,我们在uuu上+1+1+1,在vvv上+1+1+1,在lca ...

  3. 洛咕 P4556 [Vani有约会]雨天的尾巴

    终于把考试题清完了...又复活了... 树上差分,合并用线段树合并,但是空间会炸. 某大佬:lca和fa[lca]减得时候一定已经存在这个节点了,所以放进vector里,合并完之后减掉就好了... 玄 ...

  4. [Vani有约会]雨天的尾巴 (线段树合并)

    题目链接 Solution 树上差分+线段树合并. 在每个节点上维护一棵权值线段树. 然后如果需要修改 \(x,y\) 两点,则在 \(x\) 处和 \(y\) 处分别加上 \(1\) 的权值. 然后 ...

  5. 雨中的尾巴(线段树合并+树上差分)

    哇这道题 恶心死我 首先要知道,树上差分一般解决的问题是关于树上的覆盖问题 然后遇到覆盖问题尽量不要打树剖(会慢很多) 关于此题 因为这道题覆盖的是 从xxx到yyy的点 所以我们在 x,yx,yx, ...

  6. 【线段树合并】解题报告:luogu P4556雨天的尾巴 (树上对点差分 + 动态开点 + 线段树合并)线段树合并模板离线/在线详解

    题目链接:雨天的尾巴 本题本身是一个非常简单的一道树上差分的模板题,但是由于变态的数据范围,我们直接用数组是存不下的(本来使用一颗普通的线段树直接维护最大值即可.但是本题的空间只有128MB,直接按照 ...

  7. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

  8. 洛谷 p3372 模板-线段树 1

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...

  9. 算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)

    实现功能--对于一个N×M的方格,1:输入一个区域,将此区域全部值作加法:2:输入一个区域,求此区域全部值的和 其实和一维线段树同理,只是不知道为什么速度比想象的慢那么多,求解释...@acphile ...

  10. 【luogu3373】模板 线段树 2

    题面 已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 题解 区间修改+区间查询. 维护两个LazyTag #include& ...

最新文章

  1. 在建工程费用化处理_未确认融资费用和未实现融资收益的含义和区别
  2. Linux 如何获取PAGE size的大小?
  3. batchplot插件用法_Batchplot批量打印怎么用?Batchplot批量打印教程
  4. 「兼容M1」Royal TSX for Mac 最强远程管理软件
  5. springboot logback 日志配置
  6. 转:SVN的Local方式:个人源码管理的好办法
  7. HashMap的五种遍历方法
  8. 华为认证hcia含金量_【华为认证】HCIA-DATACOM史上最全精选题库(附答案解析)...
  9. 订单系统:订单生成及其状态机流转介绍
  10. iweboffice注意事项
  11. 网站目标定位的关键词和选择质量高的关键词
  12. 文化财经SAR指标计算(一)
  13. 前端自动化测试 之 视觉测试
  14. 群控时,如何进行电脑主机配置?
  15. 一次Linux系统被攻击的分析过程
  16. 一些常用的html、css、js的简单应用
  17. 华硕B250M+I5-7500黑苹果EFI引导文件
  18. 微信程序开发之微信接入篇
  19. VSCODE配置SSH连接服务器
  20. leetcode算法总结 —— 快速幂算法

热门文章

  1. git 解决悬空文件问题
  2. 点击自定义按钮弹出百度商桥对话框
  3. 机场精细化管理_王晓鸿:BIM技术在机场工程精细化管理的应用
  4. b站pink老师JavaScript的PC端网页特效 案例代码——引用animate.js案例
  5. 计算机nie,聂眉宁-西南石油大学 - 计算机科学学院
  6. 微博是一种倒退,而非革命
  7. 速学Sql Server从基础到进阶
  8. GPU共享内存小结---pycuda
  9. 神经网络的反向传播算法推导
  10. 佛罗里达大学计算机博士,2020年佛罗里达大学博士含金量