随笔分类 - 算法—分治
摘要:3730: 震波 链接 分析: 动态点分治。 求距离小于等于k的点权和。 建出点分树,然后对于每个分治中心,维护连通块到这个点的所有距离,因为要容斥掉多计算的,所以在维护这个点到这个分治中心在点分树的父节点的距离。 动态开点线段树,下标为距离,记录权值和。 空间复杂福:$nlog^2n$,时间复杂度
阅读全文
摘要:#2135. 「ZJOI2015」幻想乡战略游戏 #2135. 「ZJOI2015」幻想乡战略游戏 链接 分析: 动态点分治,求加权重心,带修改。 考虑如果知道了一个点s,如何求答案,那么首先可以点分治的思想,求每个联通块内所有点到分治中心距离和,然后加上分治中心到s的距离。 当然有一部分会算重,就
阅读全文
摘要:1095: [ZJOI2007]Hide 捉迷藏 链接 分析: 动态点分治。Qtree4没过。。。 先建出点分树,然后每个点维护两个堆,一个h1表示当前根的连通块内,所有点到点分树上父节点的距离,h2表示当前根的所有子节点的h1的最大值。 更新的时候,深度是log的,暴力修改堆中的元素即可。 代码:
阅读全文
摘要:4553: [Tjoi2016&Heoi2016]序列 链接 分析: 注意所有m此操作中,只会发生一个,于是考虑dp。dp[i]=dp[j]+1,j<i,a[j]<=L[i],R[j]<=a[i]。L[i]为位置i处,所有可能发生的改变中的最小值,R[i]为最大值。 这是三维偏序问题,于是CDQ+树
阅读全文
摘要:4025: 二分图 链接 分析: 线段树分治+并查集。 以时间为下标建立一颗线段树,对于每条边u,v,l,r,在期出现的时间[l,r]的时间上打标记,表示时间[l,r]存在这条边,那么在线段树上递归到叶子结点,就是每个时刻所有出现的边。 从根节点出发,把所有的边加入,并查集维护是否合法,如果到叶子结
阅读全文
摘要:4538: [Hnoi2016]网络 链接 分析: 整体二分。 对于一次操作,可以二分一个答案mid,判断权值大于mid的路径是否全部经过这个点。如果是 ,那么这次询问的答案在[l,mid-1]之间,否则在[mid,r]之间。 判断是否所有的路径经过一个点:等价于数经过这个点的路径条数,对于一条路径
阅读全文
摘要:E. Intersection of Permutations 链接 题意: 给定两个序列,询问第一个排列的[l1,r1]和第二个排列[l2,r2]中有多少个共同的数,支持在第二个排列中交换两个数。 分析: 首先求出一个数组,c[i],第二个排列的这个数字在第一个排列中出现的位置。那么查询就是询问c
阅读全文
摘要:1109: [POI2007]堆积木Klo https://lydsy.com/JudgeOnline/problem.php?id=1109 分析: 首先是dp,f[i]表示到第i个的最优值,f[i]=f[j]+1,(j<i,a[j]<a[i],j-a[j]<i-a[i]),三维偏序,可以cdq+
阅读全文
摘要:P2664 树上游戏 https://www.luogu.org/problemnew/show/P2664 分析: 点分治。 首先关于答案的统计转化成计算每个颜色的贡献。 1、计算从根出发的路径的答案:如果某一个颜色是从根到这个点的链上的第一次出现的,那么这个颜色会对根产生siz[x]个贡献。(根
阅读全文
摘要:4237: 稻草人 https://www.lydsy.com/JudgeOnline/problem.php?id=4237 分析: CDQ分治+单调栈。 首先按照x排序,每次分治,考虑左边一个点和多少个右边的点可以有贡献。CDQ的过程中,按照y从大到小排序。 左右两边的y都是从大到小的,所以对于
阅读全文
摘要:百度地图的实时路况 https://nanti.jisuanke.com/t/11217 题意:d(u,v,w):从u到w,严格不经过v的路径长度,计算每个d(u,v,w),求和,n 300 分析: floyed:去掉一个点直接最短路,复杂度$n^4$ 优化:去掉一个点,重新做一遍floyed,太浪
阅读全文
摘要:4456: [Zjoi2016]旅行者 https://www.lydsy.com/JudgeOnline/problem.php?id=4456 分析: 每次对当前矩阵按长边化一条分治线,然后在对分治线上的点跑最短路,然后可以处理处过分治线的询问。对于不过分治线的,递归处理。 先写的dijkstr
阅读全文
摘要:Mountains 题面 题意: 选最多的点使得两两看不见。 分析: 分治,solve(l,r)为区间[l,r]的答案。那么如果不选最高点,分治两边即可,选了最高点,那么在最高点看不见的区间里分治。 代码:
阅读全文
摘要:3262: 陌上花开 链接 分析 三维偏序问题。CDQ分治+树状数组。 首先没注意如何输出,就只直接把f[i]输出了,调啊调......然后没注意是小于等于又调啊调......最后没有特判相同的,看了题解才知道...... 代码
阅读全文
摘要:1176: [Balkan2007]Mokia 链接 分析 三维偏序问题,CDQ分治论文题。 代码
阅读全文
摘要:1316: 树上的询问 链接 分析 每次查找出重心(去掉重心后的最大的联通块最小,保证复杂度),然后统计过重心的路径中有没有长度等于len的。 统计时,由于必须要过重心,不能是同一棵子树中的。可以挨个遍历每棵子树,然后统计即可。 判断时,用set查找一下即可。 代码
阅读全文
摘要:2599: [IOI2011]Race 链接 分析 被memset卡。。。 点分治,对于重心,遍历子树,记录一个数组T[i],表示以重心为起点的长度为i的路径中最少的边数是多少。然后先遍历子树,更新答案,然后在遍历一边更新T,防止出现两个起点在同一棵子树中的情况。 代码
阅读全文
摘要:Tree Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v)=The min distance between node u
阅读全文
摘要:1688 求逆序对 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目 数据范围:N<=105。Ai<=105。时间限制为1s。 输入
阅读全文

浙公网安备 33010602011771号