- 博客(8)
- 收藏
- 关注
原创 Weak Pair 离散化 + 树状数组
传送门题目描述在一棵有根树上求出有多少个点对(u,v),满足 u是v的祖先且a[u]*a[v] ≤k.分析光光跟我说这道题可以用主席树直接秒掉,但是由于我不会主席树,所以只能用一种十分麻烦的做法去处理(下次一定学)我们可以将所有的权值存入vector里面,排序去重,然后用map进行定位,然后去dfs这棵树,每到达一个节点,去二分查找符合当前条件的最大权值是在vector中的位置,然后用树状数组去求和,然后将这个点的权值的位置的地方+1,dfs下一个节点,回溯的时候 -1即可代码#pragma
2020-12-12 01:10:54 128
原创 Counting Offspring dfs序 + 树状数组
传送门题目描述给定一棵树,树根的编号为p。对于每个节点,求以它为根的子树中有多少个节点的编号小于它。分析我们可以根据节点的大小,然后把对应位置设置为1,然后我们要求某一个节点的答案的时候,只需要求子树的值即可我们可以用dfs序和树状数组去维护答案,最后求和即可代码#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <que
2020-12-11 22:16:46 93 1
原创 Snacks dfs 序 + 线段树
传送门题目描述百度科技园内有n个零食机,零食机之间通过n−1条路相互连通。每个零食机都有一个值v,表示为小度熊提供零食的价值。由于零食被频繁的消耗和补充,零食机的价值v会时常发生变化。小度熊只能从编号为0的零食机出发,并且每个零食机至多经过一次。另外,小度熊会对某个零食机的零食有所偏爱,要求路线上必须有那个零食机。为小度熊规划一个路线,使得路线上的价值总和最大。分析这道题我们可以把树形结构去转换成链式结构,去维护从跟节点到每一个节点的距离,然后用线段去去维护区间最值,修改一个点的价值,其实就是对
2020-12-11 22:04:52 108
原创 Alyona and a tree 树上差分 +倍增
传送门分析这道题跟我前段时间写的一道数位DP的思路有点一致,但是居然没想出来首先我们确定一下,任何一个平衡数的支点,都仅存在一个支点,所以,我们可以去枚举每一个支点,计算每一个支点下,平衡数的数量,然后相加即可最后只需要注意一下,如果每一位都取0,那么任何一位都可以作为支点,但合法的数字只有一个0,所以最后答案需要特殊处理一下代码#include <iostream>#include <cstdio>#include <cmath>#include &l
2020-12-10 23:36:11 134
原创 松鼠的新家 LCA + 树上差分
题意中文题意就不需要分析了吧分析首先两点之间,我们应该去走最短路径最能得到最优解,所以很容易想到求LCA,假设两点分别为x,y,LCA(x,y) = u,所以只需要把路径 x -> u -> y上的所有点加上一个糖果即可,暴力做法肯定会t,所以我们考虑一种很巧妙额做法:树上差分两个子节点+ 1,LCA - 1最后因为LCA在这条路径上因为两点子节点都加了1,所以造成LCA增加了两次,需要给LCA和他的父节点 - 1最后因为除了出发的点,每一个点都即成为了一次出发点,也成为了一次终点,但
2020-12-07 15:53:32 94
原创 让我们异或吧 DFS + 位运算技巧
题意中文题意就不需要分析了吧分析我在洛谷上面搜的是LCA的标签,但是这道题跟LCA好像关系不太大?首先因为有n - 1条边,首先我们可以确定这是一条树,然后我们去求异或值的时候,可以先求出点到跟节点的异或值,然后把待求的两点跟根节点之间的异或值异或一下就好了,因为重复的部分会进行抵消代码#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#inclu
2020-12-07 10:08:39 96
原创 Information Graph
题意有 n 个雇员在公司 “X” 工作 (为方便考虑,将他们从 1 到 n 编号)。最初,雇员之间没有任何关系。在接下来的每 m 天中,每天发生以下事件中的一件:要么雇员 y 变成雇员 x 的上司 (那时,雇员 x 尚未拥有一个上司);要么雇员 x 取得一小包文件并签署它们,然后他将这一小包给了他的上司。他的上司签署了这些文件,并将它们给了更上一层的上司,依此类推 (签署文件的最后一人,将它们发送到归纳箱中);要么类型为 “判断雇员 x 是否签署了特定的文件” 的一个请求到来。您的任务是编写一个程
2020-12-06 21:54:08 160
原创 Blood Cousins dsu on tree + k祖先查询
题意给出一棵家谱树,定义从 u 点向上走 k 步到达的节点为 u 的 k-ancestor。多次查询,给出 u k,问有多少个与 u 具有相同 k-ancestor 的节点。分析这个问题我们可以离线去查询首先我们先把每一个查询节点的k-ancesto处理出来,然后就把这个问题转化成求节点x的子树中,比他深度大k的节点有多少,就是一个树上静态统计问题了,可以用dsu on tree来进行处理代码#include <iostream>#include <cstdio>#i
2020-12-06 13:17:41 93
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人