摘要: 简介 启发式合并本质上是一种优化的暴力,可用于拥有稳定结构的数据结构。 实现思路 考虑 "梦幻布丁「HNOI2009」" 。 显然的暴力思路是用链表维护每种颜色的位置,然后每次修改的时候暴力合并两条链。 不难证明,这样的最坏时间复杂度将达到$O(n^2)$,不能接受。 可以观察到,合并的时间复杂度只 阅读全文
posted @ 2019-09-07 22:28 Ilverene 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 题意 给定一个有多种颜色组成的序列,以及两种操作: 1. 将某种颜色全部染成另一种颜色。 2. 询问颜色段的数量。 思路 将每一种颜色的位置分别存入链表,然后染色的时候启发式合并。 这道题数据出的比较毒瘤,有同种颜色互相染色的数据,还有将已经不存在的颜色进行染色的数据,需要特判。 代码 阅读全文
posted @ 2019-09-07 22:11 Ilverene 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题意 有一个森林,初始有一定的边。给定两种操作: 1. 查询两点路径上k小值。 2. 联通两点。 强制在线。 思路 维护主席树,合并的时候按照子树大小dfs暴力合。 代码 学校OJ AC BZOJ MLE Luogu MLE (然而学校OJ空间限制比洛谷小一半???) cpp include usi 阅读全文
posted @ 2019-09-07 16:24 Ilverene 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题意 给定n个点以及两种操作: 1. 将两个点连接在一起 2. 询问两个点最早在什么时候联通。 强制在线。 思路 将时间作为权值,在并查集上跑lca即可。 代码 cpp include using namespace std; namespace StandardIO { templateinlin 阅读全文
posted @ 2019-09-07 13:04 Ilverene 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题意 给定一个图,以及一颗树。求将树上的节点重新编号后,能够被图覆盖的种类数?节点个数≤17。 思路 考虑朴素的树上dp。 设子状态为$dp[i][j][s]$,表示节点i的编号为j,包含子树所构成的点集为s的种类数。 转移的时间复杂度为$O(n3^n)$,完美被卡。 考虑题目给出的限制条件: 1. 阅读全文
posted @ 2019-09-07 10:57 Ilverene 阅读(231) 评论(0) 推荐(0) 编辑