倍增
文章平均质量分 71
1
kaka0010
退役ACMer/算法竞赛菜鸡
展开
-
2021ccpc女生赛 B.攻防演练 倍增
原题链接:https://codeforces.ml/gym/103389/problem/B 目录题意分析Code 题意 给定一个字符串,每次询问区间[l,r][l,r][l,r],求一个串T的最小长度,使得T不等于任何区间内的子串 分析 如果是求子串,我们一般采用遍历的方式,记录当前位置的下一个字符的出现位置,然后一直往后跳,如果最后落点在r之内,说明区间有效。那么反过来想,我们如果从l-1的位置开始往后跳,当跳出r的那一刻结束,这样跳的步数也就是最短子串的长度。 因此思路清晰起来,我们记录一个nxt[原创 2021-11-02 13:18:15 · 1891 阅读 · 0 评论 -
CF932D Tree 树上倍增
原题链接:https://codeforces.com/contest/932/problem/D 目录题意分析Code 题意 一开始有一个初始节点1,权值为0,接下来会有一系列操作: R W 将第cnt个节点挂在第R个节点上,权值为W R W,询问从R开始的节点往上,如果遇到大于它的权值就加进来,总权值不能超过W,问能加进来多少个 分析 这题和 城市网络非常像,只不过这题是动态加点而已。 但这里多了一个限制,就是总权值之和。我们在记录倍增数组求祖先的时候,可以直接把权值也一起统计,记录sum[i][j原创 2021-08-13 15:26:03 · 141 阅读 · 0 评论 -
【Nowcoder】城市网络 树上倍增
原题链接:https://ac.nowcoder.com/acm/problem/13331 目录题意分析Code 题意 有一棵树,树上每个节点都有一个权值,1为根节点。每次选择两个节点u,v保证v在u通往根节点的路径上,每次从u出发,身上携带价格为w的珠宝,每次遇到权值比你大的节点就可以交换一次,问一共会交换多少次。 分析 看到这类问题一般就会往倍增上面思考,难点就是如何找出第一个大于你权值的祖先节点。在一个序列上我们知道用单调栈来实现,在树上其实可以用更简单的倍增解决 如果父节点就比你大,直接将f[x原创 2021-08-13 14:28:48 · 137 阅读 · 0 评论