点分治
文章平均质量分 50
Cyhlnj
这个作者很懒,什么都没留下…
展开
-
聪聪可可
树分治,每次统计时有两种组合%3==2和%3==1, %3==0和%3==0 乘法原理即可# include <stdio.h># include <stdlib.h># include <iostream># include <algorithm># include <string.h># define IL inline# define RG register# define F原创 2017-12-12 19:36:09 · 247 阅读 · 0 评论 -
UOJ#349. 【WC2018】即时战略
传送门按照紫荆花之恋的做法,动态维护一下点分树的形态把点随机打乱每次从当前的根开始 exploreexploreexplore,如果已经有了就暴力跳到那个点否则加入这个点注意一条链的要单独处理# include <bits/stdc++.h># include "rts.h"using namespace std;typedef long long ll;cons...原创 2019-01-16 21:50:43 · 382 阅读 · 0 评论 -
UOJ#55. 【WC2014】紫荆花之恋
传送门暴力思路就是每次点分治计算答案点分治之后,条件可以变成 disi−ri≤rj−disjdis_i-r_i\le r_j-dis_jdisi−ri≤rj−disj每次只要查找 rj−disjr_j-dis_jrj−disj 的排名然后插入 disj−rjdis_j-r_jdisj−rj,随便拿个平衡树维护即可考虑如果带修改,就是动态点分治,每个点维护两个平衡树,一个表示...原创 2019-01-16 17:43:06 · 440 阅读 · 0 评论 -
Bzoj3672: [Noi2014]购票
题面传送门Sol设f[i]f[i]f[i]表示iii到根的最小代价 f[i]f[i]f[i]可以由f[j]f[j]f[j]转移而来,要求jjj为iii的父亲,并且满足距离限制显然DPDPDP式可以斜率优化 然而这是在树上,并且每次都要一个iii往上的若干个点的凸包可以考虑维护区间凸包,可以用线段树 或者CDQCDQCDQ分治CDQCDQCDQ分治的方法,其实是点分治,...原创 2018-05-31 11:50:12 · 191 阅读 · 0 评论 -
SPOJ QTREE5
题意一棵nnn个点的树,点从111到nnn编号。每个点可能有两种颜色:黑或白。 我们定义dist(a,b)dist(a,b)dist(a,b)为点aaa至点bbb路径上的边个数。 一开始所有的点都是黑色的。 要求作以下操作: 0i0i0 i 将点iii的颜色反转(黑变白,白变黑) 1v1v1 v 询问dist(u,v)dist(u,v)dist(u,v)的最小值,uuu与vvv可以相...原创 2018-03-24 11:01:44 · 359 阅读 · 0 评论 -
Bzoj1758: [Wc2010]重建计划
题面传送门Sol题意就是给你一棵树,有边权 求边数在[L,U][L,U][L, U]内的一条路径,使得边权和除以边数最大,输出这个最大值二分答案+点分治+单调队列 二分一个答案midmidmid,把所有的边权减去这个midmidmid就是checkcheckcheck是否有一条边数满足要求的大于等于零的路径 bfsbfsbfs求出当前每个点到根的disdisdis和d...原创 2018-02-25 21:45:56 · 330 阅读 · 0 评论 -
Luogu4149:[IOI2011]Race
题目bzoj权限题。。。 LuoguSol点分治辣,边权非负,k>=1,开个1e61e61e6的桶就好辣# include <bits/stdc++.h># define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace st...原创 2018-02-25 16:04:49 · 252 阅读 · 0 评论 -
SPOJ1825:Free tour II
题意luogu的翻译 给定一棵n个点的树,树上有m个黑点,求出一条路径,使得这条路径经过的黑点数小于等于k,且路径长度最大Sol点分治辣 如果是等于kkk的话,开个桶取maxmaxmax就好了 而小于等于kkk,就可以把桶换成树状数组,求前缀maxmaxmax 很慢能过# include <bits/stdc++.h># define RG regis...原创 2018-02-26 19:05:19 · 253 阅读 · 0 评论 -
Bzoj4016: [FJOI2014]最短路径树问题
题面传送门Sol先SPFASPFASPFA求出单源最短路,BfsBfsBfs建出树,字典序可以用堆解决 然后就是点分治的一眼题 开桶记录到当前根经过边长度相同的最长路,记录它的长度自己强行yyyyyy了一个这种类型的点分丑陋写法# include <bits/stdc++.h># define RG register# define IL inl...原创 2018-02-26 14:54:48 · 358 阅读 · 0 评论 -
动态点分治:Bzoj1095: [ZJOI2007]Hide 捉迷藏
简介这是我自己的一点理解,可能写的不好 点分治都学过吧。。 点分治每次找重心把树重新按重心的深度重建成了一棵新的树,称为分治树 这个树最多有log层。。。 动态点分治:记录下每个重心的上一层重心,这棵分治树就确定了 修改就暴力在分治树中向上改,反正是log的 至于为什么叫动态点分治我不知道。。。我觉得就是点分治 做题时最主要的难点不在点分治,在于维护什么和怎样维护例原创 2018-01-12 17:19:34 · 515 阅读 · 0 评论 -
Bzoj3730: 震波
题面戳我 Sol动态点分治: 建个点分树,每个节点开两颗线段树,以与该点的距离为下标,维护价值和 一棵树维护这个点的,一棵维护对上层重心的贡献然后。。 然后?直接暴力搞就行了注意常数优化我TLE了一遍,第二遍卡过去的# include # define RG register# define IL inline# define Fill(a, b原创 2018-01-13 15:44:24 · 401 阅读 · 0 评论 -
Bzoj4372: 烁烁的游戏
题面戳我Sol和bzoj震波那道题差不多 加上线段树标记永久化就好了# include # define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long ll;const int _(2e5 +原创 2018-01-13 16:32:48 · 278 阅读 · 0 评论 -
BZOJ3924 : [Zjoi2015]幻想乡战略游戏
Sol作为一个刚刚学动态点分治的新手,表示这道题很难啃动。。。既然是动态点分治,那么先建出点分树,之后暴跳父亲就是log的这道题就是要求带权重心,可以证明,随意在点分树上从一个点出发,每次选最小答案的子重心,最后一定能找到答案。。感觉就相当于在树上二分。。。 修改就爆跳父亲# include # define RG register# define IL inline#原创 2018-01-13 07:43:31 · 238 阅读 · 0 评论 -
HDU4812
树分治 求逆元请递推,不然会TLE 开桶记录即可 注意常数# pragma comment(linker,"/STACK:102400000,102400000")# include <stdio.h># include <stdlib.h># include <iostream># include <algorithm># include <string.h># include原创 2017-12-12 19:40:10 · 358 阅读 · 0 评论 -
POJ1741
树分治,每次把每个点的deep取出,排序。。。尺取法。。。# include <stdio.h># include <stdlib.h># include <iostream># include <algorithm># include <string.h># define IL inline# define RG register# define Fill(a, b) memset(原创 2017-12-12 19:37:40 · 263 阅读 · 0 评论 -
BZOJ3451:Tyvj1953 Normal
根据期望的线性性,答案就是 ∑\sum∑ 每个连通块出现次数的期望而每个连通块次数的期望就是 ∑\sum∑ 连通块的根与每个点连通次数的期望也就是对于一条路径 (i,j)(i,j)(i,j),设 iii 为根,那么 iii 必须是这条路径第一个被选择的点,概率为 1dis(i,j)\frac{1}{dis(i,j)}dis(i,j)1,其中 dis(i,j)dis(i,j)dis(i,j) ...原创 2019-02-15 11:18:02 · 184 阅读 · 0 评论