随笔分类 -  算法-树链剖分

摘要:题目大意 一棵树上有m个人,每个人有出现时间、速度以及起点终点,到达终点时会瞬间消失,求最早两人相遇的时间 n,m<=1e5 题解 树剖变成若干线段求交,按照时间排序后set维护即可,相交的两个只可能相邻所以只用考虑相邻两个的 注意考虑k相等的情况 code #include <bits/stdc+ 阅读全文
posted @ 2020-10-24 07:39 gmh77 阅读(125) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 二分+hash判断 长链剖分求k级祖先 性质:一个点的k级祖先所在链长度>=k 证明:如果该点和祖先在同一条链上则得证,否则存在更长的链 在每条链顶维护往上/下len个,找的时候先跳到2i级祖先(2i<k且i最大),然后O(1)找即可 因为2^i级祖先所在链长度>=2^i,且k-2^ 阅读全文
posted @ 2020-09-15 22:52 gmh77 阅读(190) 评论(0) 推荐(0) 编辑
摘要:题目大意 https://www.luogu.com.cn/problem/AT3721 题解 设f[i][j][0/1/2]表示到点i统计的是深度为j的,在点i的和为0/1/>1 长链剖分,再记个时间维护f[2]->f[0]的 code #include <bits/stdc++.h> #defi 阅读全文
posted @ 2020-09-03 22:32 gmh77 阅读(166) 评论(0) 推荐(0) 编辑
摘要:题目描述 题解 不知道有没有一个log的,两个log简单自然 没有l限制的一个log做法:很显然的想法是dfs维护栈二分,问题是要弹栈 用树来维护栈,一个点到根的路径就是该点处的栈,倍增弹栈&查找即可一个log 加上l限制后会出问题,考虑naive的log^3做法,直接树剖线段树维护凸壳+二分 发现 阅读全文
posted @ 2020-07-12 16:52 gmh77 阅读(120) 评论(0) 推荐(0) 编辑
摘要:题目描述 n<=5*10^6 题解 好题 直接贪心/dp是假的,反例考虑两条长链+上面的一些短链 硬点本体只会往下走,分身负责清理掉伸出去的链,最后留下一条最长链一起走下去 dp方程式见官方题解,直接做是n^2的 一些性质: ①留下的链一定在本体所在点上,否则可以再分一段 ②转移过来的点之间的距离要 阅读全文
posted @ 2020-07-02 16:41 gmh77 阅读(222) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2020-06-12 19:28 gmh77 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目描述 题解 第一次写动态dp,就是把转移变成矩阵然后用数据结构维护 把式子变成树的形式,等于从下往上每次合并儿子 树剖,叶子直接维护概率,非叶子(操作符)维护 重儿子是多少时的01变化 儿子只有两个,转移矩阵取决于自己以及轻儿子 这样的好处是每次修改只用修改向上的链顶父亲的矩阵,修改量是O(lo 阅读全文
posted @ 2020-04-12 11:38 gmh77 阅读(395) 评论(0) 推荐(0) 编辑
摘要:题目描述 Description Input Output Sample Input 3 1 2 1 3 Sample Output 2 Explanation 只有连通块为整棵树时或只有一个点时小筄会输,其余情况小筄会赢。 Data Constraint 题解 一个连通块先手必败,当且仅当1在直径 阅读全文
posted @ 2020-01-17 07:57 gmh77 阅读(283) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示