摘要: 最小值就一个点全部是出边,相邻的点都是入边,这么一直排下去,答案就是 $n 1$ 最大值就选重心,每个子树要么全是出边要么全是入边 每个子树里的答案已经确定了,子树之间若有 $x$ 个是出边,就有 $n x 1$ 个是入边 经过重心的答案就是 $x(n x 1)$ 相当于有子树个物品,每个物品的大小 阅读全文
posted @ 2020-02-18 22:16 Mrzdtz220 阅读(104) 评论(0) 推荐(0)
摘要: kruskal重构树 因为建出来的树有大根堆性质,而且kruskal过程是优先考虑短的边的 所以LCA处的值一定是最短的最长边 阅读全文
posted @ 2020-02-18 17:43 Mrzdtz220 阅读(92) 评论(0) 推荐(0)
摘要: 如果知道kruskal重构树这个东西就很简单了。 kruskal重构树就是kruskal的过程中,不直接连 $(u, v)$,而是新建一个节点作为 $u$ 和 $v$ 的父亲,并且边权赋在这个点上 这样就得到一棵二叉树(或者森林) 有大根堆的性质 然后倍增预处理祖先,每次询问就是跑到最高的一个祖先, 阅读全文
posted @ 2020-02-18 17:27 Mrzdtz220 阅读(98) 评论(0) 推荐(0)
摘要: 支持离线 边和询问都按权值排序,然后扫描线对每一条边进行处理,将小于等于当前询问权值的边进行处理 加入一条边相当于合并两个连通块,用并查集维护根,线段树合并两个根处的线段树即可 查询就在根查询权值线段树的第 $k$ 大 把递归版的线段树换成循环的trie的写法,跑得更慢了。。 阅读全文
posted @ 2020-02-18 14:28 Mrzdtz220 阅读(131) 评论(0) 推荐(0)
摘要: 分治无法快速维护,考虑分块 $f_{i,j,k}$ 表示第 $i$ 块到第 $j$ 块之间权值为 $1$ 到 $k$ 的答案,$c_{i,j,k}$ 表示第 $i$ 块到第 $j$ 块之间权值为 $k$ 的个数 预处理及回答询问时,新加入一个颜色为 $k$ 的点对答案的贡献为 $2 cnt_k + 阅读全文
posted @ 2020-02-18 13:23 Mrzdtz220 阅读(131) 评论(0) 推荐(0)
摘要: 预处理一下前缀后缀最大值 每次用set贪心取一个合适的数 然后枚举分割点 有可能两次都取了同一个数 $x$,而 $y$ 没被取到 若 $x y$,那么就可以在点数小的那一轮拿 $y$ 替换 $x$ 若 $x inline int _i() { int x = 0, f = 1; char ch = 阅读全文
posted @ 2020-02-18 09:09 Mrzdtz220 阅读(87) 评论(0) 推荐(0)