
点分治
昵称很长很长真是太好了
这个作者很懒,什么都没留下…
展开
-
牛客练习赛84:牛客推荐系统开发之标签重复度(点分治+动态开点权值线段树)
题意:给你一棵树,问树上所有两点路径上的(最大值最小值乘积)之和。题解:很明显的一个点分治问题,然后就是个二维偏序问题了(虽然我也不知道啥是二维偏序)。点分治不难,重点是点分治内cal函数如何去写。假设当前计算的这个树是以root为根节点,我们对于每一次分治的过程,每个结点储存两个值,一个是从根节点到当前结点路径上的最大值,另一个是最小值记为maxnode,minnodemax_{node},min_{node}maxnode,minnode。对于任意两点,是由这两个点到root的边上的最大原创 2021-06-14 21:04:39 · 173 阅读 · 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 · 148 阅读 · 0 评论 -
P3806 【模板】点分治1
题意:给定一棵有 n 个点的树,询问树上距离为 k 的点对是否存在。题解:#include<bits/stdc++.h>#define endl '\n'#define int long longusing 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 · 95 阅读 · 0 评论