上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 16 下一页
摘要: 这是一道树链剖分/树上差分/LCA的题目…… 本来想打一遍树剖,但是被那强大的码量劝退了,于是我开始思考树上差分。 我们先把每个点深度的k次方打一个表,之后我们因为要做减法,所以我们令vali,k​表示i到1号点路径上点深度的k次方之和 然后问题来了,我们维护的是点权和,所以我们发现直接减的话会导致 阅读全文
posted @ 2019-05-03 15:40 AD_shl 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 这道题说每一步可以走2k个距离,那么这道题就直接和倍增建立了联系。 由于n的范围很小,我们可以用Floyd处理边的关系,定义vis[i][j][k]表示ij之间是否存在2k的路径,dis[i][j]表示ij之间的最短距离是多少。 我们可以先进行一次Floyd处理vis,枚举ij以及中间点k,若vis 阅读全文
posted @ 2019-05-03 14:36 AD_shl 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 一道“扩展域”并查集的题目,我们把每一个点拆分成三个域:同类、食物、天敌。 我们假设x的同类域为x,食物域为x+n,天敌域为x+n+n。假设x与y是同类,那么说明x+n与y+n是同类,x+n+n与y+n+n是同类。 假设x吃y,那么x+n与y是同类,x+n+n与y+n是同类,x与y+n+n是同类。 阅读全文
posted @ 2019-05-02 22:56 AD_shl 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 这是一道带权并查集的题目。 我们维护三个数组,f[x]表示节点x所在集合的代表元素(相当于合并之后的树根),size[x]表示以x为代表元素的集合的大小是多少(相当于一列战舰的数量),d[x]表示在这一列战舰中,x前面的战舰有多少。 因此对于每一次询问,答案就是|d[x]-d[y]|-1. 我们怎样 阅读全文
posted @ 2019-05-02 22:33 AD_shl 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 一道经典的贪心题。 我们不妨将物品按照价值从大到小排序,对于每一个物品,我们尽量让它晚一些被售出,这样得到的答案一定是最优解。 我们可以简单证明一下,首先我们先售出获利较大的物品,这个的正确性是显然的。对于某一个物品,我们最好在时间范围之内让它最晚被售出。为什么呢?因为这个物品在允许范围内的任意时间 阅读全文
posted @ 2019-05-02 22:11 AD_shl 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 读完题,我产生了一个显然的想法:先求出这张图的最大生成树,然后再dfs一遍求出联通块的个数(图可能不连通),之后这张图变成了一棵树,题目就变成了在一棵树上给定一条路径,求这条路径上最小的边权是多少。(-1的情况可以通过并查集直接判断)。 考虑一条路路径(x,y),我们可以把它拆分成(x,lca(x, 阅读全文
posted @ 2019-05-02 15:27 AD_shl 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 这是一道毒瘤的LCA的题目。 我们对这棵树进行一次dfs,求出每一个点的时间戳,不难发现,我们按照时间戳排序,把异象石的节点排序,并且累加相邻两点的路径,最后的结果就是所求答案的两倍。 因此,我们采用STL中的set,按照时间戳递增的顺序维护异象石出现的序列,并用变量ans记录相邻两点的距离之和,那 阅读全文
posted @ 2019-05-02 13:31 AD_shl 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 关于lca和树上差分的题目。 根据题目描述,主要边是一棵树,附加边会和主要边构成一个环,如果我们第一步切断了一条主要边,我们下一步就必须切断一条附加边才能符合题意。 所以,我们可以认为一条附加边(x,y)把树上x,y之间的路径覆盖了一遍,我们需要统计每条主要边被覆盖多少次即可。具体地,如果第一步我们 阅读全文
posted @ 2019-05-01 19:34 AD_shl 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 这是一道关于树的直径的好题,值得一刷。 本题有两个难点,一个是分类讨论k,另一个是代码的实现(其实还好)。 本题k可以为1或2,因此我们分类讨论一下。 当k=1时,我们可以任选两个点连接,假设我们一条边都不连接,那么我们需要走2*m次,其中m为边的数量。假设我们在x,y上连一条边,那么我们用1个距离 阅读全文
posted @ 2019-05-01 14:33 AD_shl 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 这是一道最小生成树相关的题目 题目要求在一棵最小生成树的基础上增加一些边变成一张完全图,但是这张图的最小生成树仍然是原来的树,求增加的边的边权的和最小是多少。 我们首先将边按照边权升序排列,像kruskal一样,之后我们扫描每一条边,设当前的边(x,y,z),x所在的并查集为Sx,y所在的并查集为S 阅读全文
posted @ 2019-04-30 23:21 AD_shl 阅读(166) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 16 下一页