摘要: 一道“扩展域”并查集的题目,我们把每一个点拆分成三个域:同类、食物、天敌。 我们假设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) 编辑