机房测试:tree(倍增)
摘要:题目: 分析: 这道题的正解本来不是倍增,但可以用倍增+卡常莽过去。。。 对于倍增来说,主要思想是将上下两部分信息合并。 一种很直接的想法是:直接带值计算两点间的值。 但这样是错的。 比如说合并a,b的时候: 连接他们的是+,但b之前已经执行过一次乘运算了,直接用+合并的话,会变成:a+(c*d),
阅读全文
posted @
2019-11-14 20:51
rua-rua-rua
阅读(191)
推荐(0)
CF379F New Year Tree (树的直径)
摘要:CF379F New Year Tree 分析: 树的直径就是每次求树中最远的两个点。 在一棵树上快速计算两两点之间的距离,可以用倍增。 设现在树上最远的两个点为L和R。 若在u处加两个点,直径会+1或者不改变。 对这两个点求一下到L的距离,和到R的距离,看会不会使答案更优,如果使得答案更优,就把L
阅读全文
posted @
2019-11-11 20:53
rua-rua-rua
阅读(243)
推荐(0)
赛道修建(树上贪心+multiset)
摘要:P5021 赛道修建 分析: 很明显要二分一个值。 对于一条赛道与一个点u的关系,可以分成三种情况: 1.完全在一棵u的子树内。 2.一半在子树内,一半在子树外 3. 经过u,连向子树内的另一条链 对于第一种情况,直接在递归下去的时候就计入贡献。 对于第二三种情况,开一个multiset,遇到不合法
阅读全文
posted @
2019-11-11 20:45
rua-rua-rua
阅读(168)
推荐(0)
P2486 [SDOI2011]染色 (树链剖分)
摘要:P2486 [SDOI2011]染色 分析: 颜色段数用线段树维护,记录最左端颜色与最右端颜色,每一次合并的时候,如果中间颜色有重叠,就将段数--。 链剖查询的时候注意两条链端点颜色相同的情况。 因为跳链是一个交替的过程,记录一下左右链跳完之后跳到的颜色是哪一种:ans1对应左边的x,ans2对应右
阅读全文
posted @
2019-11-08 21:41
rua-rua-rua
阅读(133)
推荐(0)
P1600 天天爱跑步 (lca+树上差分+树上开桶)
摘要:P1600 天天爱跑步 分析: 首先若想对于每一个人统计他的路线对观察点的贡献,显然是很难优化到log的。 考虑对每一个观察点统计答案。 一个观察点会被这样两种路径经过: 1.起点在其下方,从起点向上走经过它。 2.终点在其下方,从某一处的起点向下走经过它。 对于第一种情况,我们要满足:dep[ s
阅读全文
posted @
2019-11-06 20:46
rua-rua-rua
阅读(175)
推荐(0)
机房测试:折半+二分+判环+树上开桶
摘要:T1: 分析: 如果x小的话,就直接背包。这道题中n很小,60%可以直接3^10暴搜,25的呢?明显是折半嘛。 先搜前一半的物品,用map记录能拼凑出的种类数,再搜后一半物品,直接查询统计答案即可。 #include<bits/stdc++.h> using namespace std; #defi
阅读全文
posted @
2019-11-06 20:26
rua-rua-rua
阅读(174)
推荐(0)
机房模拟测试4:计数类dp+水题+树上计数
摘要:T1: 原题:P2467 [SDOI2010]地精部落 分析: 定义f[i][0/1]为递推到第i位,是奇数项大于两边还是偶数项大于两边。 但是发现,上面两种情况是等价的,只需要求出一种即可,然后将答案*2。 假设已经放了i-1个合法的高度,现在将第i个高度放入。 在i-1个高度中有i个位置是可以插
阅读全文
posted @
2019-10-28 20:52
rua-rua-rua
阅读(142)
推荐(0)
机房测试11:最小生成树(最小生成树+二分)
摘要:题目: 分析: 如果直接做最小生成树,会出现以下不合法情况: 1.白边选多了。说明白边的权值太小了,我们可以通过加大白边的权值来似的选少一点白边。 2.白边选少了。与上面同理。 我们不知道白边的取值在多少合适,但明显具有单调性(白边权值越大,选的条数一定会减少),所以可以用二分来确定白边的取值。 二
阅读全文
posted @
2019-10-22 17:51
rua-rua-rua
阅读(170)
推荐(0)
机房测试模拟1(day2):矩阵+树上贪心+bfs+状压
摘要:T1:入阵曲 n,m<=400,k<=1e6 分析:考虑只有一行的情况: 将这一行求前缀和后,一段区间的和x=sum[r]-sum[l-1],如果x%k==0,那么sum[r]%k - sum[l-1]%k == 0 转化一下,也就是说:sum[r]与sum[l-1]在模k的意义下相等。 所以对于一
阅读全文
posted @
2019-10-22 17:44
rua-rua-rua
阅读(180)
推荐(0)
机房测试13:dp专题(单调队列+树形背包+记忆化搜索)
摘要:T1: 很容易写出dp式子:定义dp[i][j]为现在是第i个烟火,位置在j,然后就可以枚举上一个时间的位置k转移过来。(j-(t[i]-t[i-1])*d <= k <=j+(t[i]-t[i-1])*d) 这样是n*n*m的,考虑优化。 固定一个边界:j-(t[i]-t[i-1])*d<=k 可
阅读全文
posted @
2019-10-14 18:30
rua-rua-rua
阅读(161)
推荐(0)
洛谷P2515 [HAOI2010]软件安装 (树形背包+tarjan缩点)
摘要:[HAOI2010]软件安装 分析: 每个点最多依赖一个点,最后建出来的图可能成环,也可能是一棵树。 先用tarjan缩点,对缩点后的图建边,会建成一颗森林(有成环点缩点后孤立) 用一个超级源点向入度为0的点连边,跑一遍树形dp 注意:1. 弄清楚依赖关系 2. 树形dp中要固定选父节点 #incl
阅读全文
posted @
2019-10-11 19:38
rua-rua-rua
阅读(160)
推荐(0)
机房测试7:gift (树形背包)
摘要:题目: 分析: 分数形式的套路是0/1分数规划:二分一个答案,将式子化简,转换为判断能否选出部分点使得 sigma(b[i]-c[i]*mid)>=0 在这道题中,因为有了依赖关系,而依赖关系不会成环,将依赖关系连边,会成为一棵树,只需要在这颗树上跑树形背包即可。 树形背包:对于一个点v,如果要选v
阅读全文
posted @
2019-10-10 08:58
rua-rua-rua
阅读(160)
推荐(0)
机房测试4:ZGY的早餐(Floyd+倍增)
摘要:题目: 分析: 由数据范围可知:前五个点是Floyd,后五个点是一颗树,两两点之间的路径是唯一的,只需要求lca即可。 Floyd注意实现细节: 1.初始化时要把dis[i][i]赋成0 2.只有1个dis数组 倍增注意: 统计答案的时候要先统计在跳fa!! #include<bits/stdc++
阅读全文
posted @
2019-10-04 21:25
rua-rua-rua
阅读(203)
推荐(0)
暑假考试题8:water(最小生成树)
摘要:题目: 分析: 一个水坑如果是想流出去,就要积水积累到四周可以流出的最小高度,就是它最后积的水。 将问题转换成:每个格子都可以向四方走,求从每个格子出发,走到边缘所经过的路径上点权最大值的最小值。 也就是说,一个点都可以向四方走,但要求花费最小,并能够到达边缘的点。 对于一些花费大的边,明显可以被删
阅读全文
posted @
2019-08-30 19:22
rua-rua-rua
阅读(222)
推荐(0)
暑假考试题6:single 单(树上推理)
摘要:题目: 分析: 对于t=0的点,显然暴力会重复计算很多。设dis为一个点以下,所有儿子到它的val*dis和,sum为子树权值和,利用父亲已知的b与计算出的dis和sum来计算儿子的值。(必须要用bfs 保证更新的顺序) (当然我是做麻烦了的) 而t=1,要求知道b反推a,那么对一个点的b值进行分析
阅读全文
posted @
2019-08-28 18:12
rua-rua-rua
阅读(160)
推荐(0)
暑假考试题5:tree 最小生成树(最小生成树+倍增)
摘要:题目: 分析: 转换问题:先求出一颗最小生成树对于非树边来说,连上非树边一定会成环,而可以使非树边成为树边的即是环上max-1 对于树边来说,它不能无限增大,是由于受到非树边的影响,而答案即为能影响它的非树边的min-1 第一个只需要求链最大值,用倍增解决第二个:对于每一条非树边,都要更新一条链,但
阅读全文
posted @
2019-08-27 18:53
rua-rua-rua
阅读(296)
推荐(0)
暑假考试题1:Count(树上拆分)
摘要:题意: 求一共有多少种方案可以把一棵树分成大小相同的几块。(即切掉一些边,使得每个连通块的点数相同) 分析: 枚举每一个数的因子,然后遍历整棵树,看是否可以划分,如果可以的话,ans+1(因为可以发现只有一种划分方法)。 那么在遍历的时候怎么判断呢? 从上向下求一遍siz,之后每一次检查now这个大
阅读全文
posted @
2019-08-22 19:41
rua-rua-rua
阅读(267)
推荐(0)
月下“毛景树” 树链剖分模板题(洛谷P4315)
摘要:树链剖分维护的都是点,而这道题要求的是边。 解决:就把边权下放,变成点权,注意下放后查询u到v的路径时要除去lca的点权,因为lca的点权是其父亲的边权 细节:线段树的加标记与等于标记的维护与下传 #include<bits/stdc++.h> using namespace std; #defin
阅读全文
posted @
2019-07-25 21:47
rua-rua-rua
阅读(159)
推荐(0)
求次小生成树(洛谷P4180&bzoj1977)
摘要:题意:求严格次小生成树(就是不能等于) 思路:先求一个最小生成树 枚举每条非树边 若连入则一定会成环那么在这个环中 删去最大的边(除非树边) 就是一个次小生成树但是如果那个最大边和非树边的值相等 有可能次小生成树的值就和最小生成树一样显然是不成立的 所以应该记录一下次大值 最大值不满足就用次大值注意
阅读全文
posted @
2019-07-11 16:47
rua-rua-rua
阅读(174)
推荐(0)