![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
Mr.Gzj
这个作者很懒,什么都没留下…
展开
-
hdu 5977 Garden of Eden(点分治枚举路径模板)
题意:一棵树,有n(n≤50000) 个节点,每个点都有一个颜色,共有k(k≤10) 种颜色,问有多少条路径可以遍历到所有k种颜色?(一条路径交换起点终点就算两条哦)思路:这个点分治很好想到,不过如何判断一条路径上是否包含所有k种颜色是一个问题。但看到k很小,考虑状态压缩,最多有(1<<k)-1种状态,利用点分治可以算出从根节点到所有子节点的路径,或运算可记录经过的路径,将...原创 2019-10-30 15:31:14 · 172 阅读 · 0 评论 -
Educational Codeforces Round 64 (Rated for Div. 2)
题意:给出n个1数,是1-n的排列,求区间最大值==区间端点和的区间的个数。思路:RMQ+分治。1-n的排列,我们就可以记录位置,然后用分治来解决;#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 10;int n, num[MAXN], pos[MAXN];int F_Max[MAXN...原创 2019-05-02 12:30:30 · 184 阅读 · 0 评论 -
hdu6701Make Rounddog Happy(启发式合并)
题意给出一个数组,要求有多少对(l,r),使得a[l]...a[r] 之间无重复元素,且max(al,al+1,…,ar)−(r−l+1)≤k思路启发式合并,st表处理出每个区间最大值所在位置,然后求出每个点不重复的左右区间。暴力扫描短的一半计数。#include<bits/stdc++.h>#define ll long longusing namespac...原创 2019-08-25 18:19:24 · 192 阅读 · 0 评论 -
POJ1741Tree(树的点分治)
题意: 给出一颗树,求树上的两点间最近距离不超过k的点对数量。思路: 对于一条树路径 只有经过或不经过一个点的情况,对于不经过的情况,把一棵树按这个点拆成好几棵分治就行了,考虑经过这个点的情况,对于这题 可以对这个点延伸出的几棵子树各做一次dfs,记录子树中出现的距离值,对于一棵树的距离值数组,把它排序求一次ans1,再对每棵子树分别求一个自己对自己的ans2,(ans1−∑ans2)(ans1...原创 2019-10-01 22:15:31 · 178 阅读 · 0 评论 -
P3806 【模板】点分治1 (点分治求树上是否存在长为k的路径)
思路: 离线求,把询问的1到m1到m1到m存入pre数组里,设当前根节点为rtrtrt,当前子树viv_ivi,求出viv_ivi的每个子节点到rtrtrt的距离dep[i]dep[i]dep[i],令isisis数组存从v0v_0v0到vi−1v_{i-1}vi−1里是否存在某个节点到rtrtrt的距离为pre[i]pre[i]pre[i],若有,则表示路径长为pre[i]pre[i]p...原创 2019-10-02 00:16:27 · 137 阅读 · 0 评论 -
P2634 [国家集训队]聪聪可可 (点分治)
题意:给出一棵树,求树上任意两个节点的距离为3的倍数在所有距离里占的比例。思路:点分治求距离为3的倍数的点对有多少。#include<bits/stdc++.h>#define ll long longusing namespace std;const int N = 4e4 + 10;int n, h[N], cnt, sz[N], rt, vis[N], mx, ...原创 2019-10-02 22:46:14 · 106 阅读 · 0 评论 -
A. Awesome Shawarma 点分治求小于k路径数
传送门题意:给出一棵树,你可以在树上两点间任意加一条边,即使原先也有边也无关,让你求加完边后图的桥数在[l,r]的点对数目。思路:点分治求小于k的路径数,树上加一条边即意味着成环,即少了k个桥,即l<=n-1-k<=r,即k<=n-1-l&&k>=n-1-r,n很大,记得开long long#include<bits/stdc++.h&g...原创 2019-10-03 00:03:30 · 197 阅读 · 0 评论 -
亚洲区预赛(沈阳)网络赛 D . Fish eating fruit (点分治 求不同种路径的和)
题意 : 输入一棵树, 输出树上两点之间距离和模3等于 0, 1, 2的长度之和对 1e9 + 7取模后的结果思路: 点分治,在calc函数里多维护了当前根节点下除本子树外其他子树的路径长度%3后等于0,1,2的路径数和路径总长度,与本子树的路径长%3后相加再%3,记得最后再乘2,因为同一条路径有两种走法。#include<bits/stdc++.h>#define ll lon...原创 2019-10-07 22:21:12 · 221 阅读 · 0 评论