点分治
昵称很长很长真是太好了
这个作者很懒,什么都没留下…
展开
-
牛客练习赛84:牛客推荐系统开发之标签重复度(点分治+动态开点权值线段树)
题意: 给你一棵树,问树上所有两点路径上的(最大值最小值乘积)之和。 题解: 很明显的一个点分治问题,然后就是个二维偏序问题了(虽然我也不知道啥是二维偏序)。 点分治不难,重点是点分治内cal函数如何去写。 假设当前计算的这个树是以root为根节点,我们对于每一次分治的过程,每个结点储存两个值,一个是从根节点到当前结点路径上的最大值,另一个是最小值记为maxnode,minnodemax_{node},min_{node}maxnode,minnode。 对于任意两点,是由这两个点到root的边上的最大原创 2021-06-14 21:04:39 · 156 阅读 · 1 评论 -
P4178 Tree (点分治)
题意: 给定一棵 n 个节点的树,每条边有边权,求出树上两点距离小于等于 k 的点对数量。 题解: 根点分治模板提很相似,只不过这个题目让你去维护小于等于k距离点的个数,这个时候我们还是要用到桶的思想,只不过每次查询查的时小于等于(k-某个值)的个数,对于这个操作,我们可以用一个树状数组来维护即可。 做的时候还是很多方面的小bug,比如说找重心的时候手残…等等 代码: #include<bits/stdc++.h> using namespace std; const int maxn=1e原创 2021-05-16 20:26:18 · 128 阅读 · 0 评论 -
P3806 【模板】点分治1
题意: 给定一棵有 n 个点的树,询问树上距离为 k 的点对是否存在。 题解: #include<bits/stdc++.h> #define endl '\n' #define int long long using namespace std; const int maxn=2e5+10; struct E{ int to,w,next; }edge[maxn]; int head[maxn],cnt; int maxp[maxn],dis[maxn],sz[maxn]; bool原创 2021-05-15 22:56:18 · 83 阅读 · 0 评论