启发式算法
Cold_Chair
我XXX就是饿死,死外边,从这里跳下去,也不会再做你九条可怜一个测试点
展开
-
【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
Description: 1<=n<=200000,1<=m<=400000题解:区间先转成前缀和数组上乱搞。看到xor我们可能会想到拆位,但是这道题拆位再路径压缩只能拿到20-50分。由于xor操作的特殊性,我们可以把限制看作两个点之间的一条边,边权是k,这样会形成一个森林,两个在同一树上的点的限制就是它们路径上的边权的xor和。这么样的话新加一个限制(x,y,k),就判断x,y是否在一棵树上,原创 2017-09-22 19:02:33 · 330 阅读 · 0 评论 -
【NOIP2017提高A组模拟9.14】生命之树 (dsu on tree+trie)
Description: 1<=n<=10510^5,|S|<=5∗1055*10^5题解:这是一道树上启发式的题目,也算是我做得树上启发式的第一题,这次比赛一下出现了两题树上启发式,都不会,让人无语。看到xor,马上拆位,这个都是老套路了。 对于一个点u,把它和它的子树的字符串全部一次丢到一个trie里,因为已经拆了位,随便维护一下就可以求出答案。但是我们知道这样暴力是很慢的,复杂度易得。利用原创 2017-09-18 12:21:07 · 840 阅读 · 0 评论 -
【GDOI2018模拟9.14】通信
Description: 1<=n<=10510^5题解:比赛没有仔细想,码了个n2n^2暴力,结果还被卡常了。 暴力思路如下: 先枚举根为x,依次加入x+1,x+2,x+3……,加入一个点y(y>x)时,如果它的子树中没有已经加入的点,那么它就会使距离增大,再暴力往上跳,给它的祖先打上标记,直到到某个点,这个点已经被打上标记就可以停止了,同时可以算出增加的距离。 感觉这个思路很想GDOI-原创 2017-09-18 19:23:59 · 532 阅读 · 0 评论 -
51nod 算法马拉松29 C题 美丽的集合
原题链接。这其实是我第一次在算马上交题,但是我太弱了,除了这题,都不会。每次合并两个集合其实就是把一个集合的元素弄到一个集合里去做01背包。竟然有集合合并,那显然要启发式合并了,这样最多提出n log n个元素。但是如果暴力01背包每次的复杂度是10^5,难以接受。注意到这个01背包非常特殊,它只要求是否能够凑成这个体积,所以这是一个布尔值。 于是bitset就可以用了,每次暴力左移,再或上去就行原创 2017-10-06 19:31:38 · 434 阅读 · 0 评论 -
51nod 1515 明辨是非 && 2017百度之星初赛第一场第二题(并查集+启发式合并)
题目:原题链接 给n组操作,每组操作形式为x y p。 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等;否则输出NO,并忽略此次操作。 当p为0时,如果第x变量和第y个变量可以不相等,则输出YES,并限制他们不相等 ;否则输出NO,并忽略此次操作。 n<=1*10^5题解:暑假打百度之星时还傻傻地以为这题就是奇偶游戏(奇偶游戏中变量的值只能是0,1)。等于有传递性原创 2017-09-21 12:12:37 · 498 阅读 · 0 评论 -
SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛* G题 危险路径
题目链接.弱鸡选手表示只会做这种水题了。首先mst。之后问题转化为在一棵树上,求每个点到其它点的路径的最大值的和。当然可以点剖什么的,也可以换根+线段树合并什么的,常数有点小炸。我的想法是用启发式并查集。mst要合并两个并查集时,设它们的根为x,ysiz[x] > siz[y], 将把y的父亲设为x。显然未合并前的x的整个子树答案+z(当前边权)*siz[y],而y的子树答案+z*siz[x]。处理原创 2018-04-16 19:30:39 · 454 阅读 · 0 评论 -
Samjia Contest 12.22
传送门: https://floj.tech/contest/449 题解: 注意到每次只会把一段往前copy,那么一个点每次都会只会向前走,假设现在x∈[yi,yi+1),hi&amp;gt;0,那么x一次向左会跳yi-hi的距离,直到跳到yi左边。 这个可以直接除一下来得到跳出这段后的位置,倒着扫,x最终会定在一个点上。 如果两个点最终汇聚在一个点上,它们就是一样的。 时间复杂度O((a+q)b)O(...原创 2018-12-24 21:57:26 · 409 阅读 · 0 评论 -
【NOI2019模拟2019.6.17】可爱
https://jzoj.net/senior/#contest/show/2775/1 题目大意: 给一个长度为n的字符串。 对每一个长度为m的子串,求其它长度为m的子串有多少个和它最多有一位不同。 1<=m<=n<=1000001<=m<=n<=1000001<=m<=n<=100000 题解...原创 2019-06-17 21:32:16 · 397 阅读 · 0 评论