
【算法】启发式合并
文章平均质量分 64
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ4919】【Lydsy1706月赛】大根堆
【题目链接】点击打开链接【思路要点】显然有\(O(N^2)\)的DP,用线段树维护每一个点的DP数组,用线段树合并支持转移。注意DP数组是单调的,可以将区间取最大值操作看做区间赋值操作。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;const in...原创 2018-04-02 15:13:58 · 388 阅读 · 0 评论 -
【CodeForces671D】Roads in Yusland
题目链接点击打开链接题目解法记 dpi,jdp_{i,j}dpi,j 表示仅考虑一端在 iii 子树内的路径,覆盖 iii 的子树,并且向上覆盖至深度 jjj 的最小代价,不难得到一个 O(N2)O(N^2)O(N2) 的动态规划解法。注意到动态规划的数组具有单调性,可以用平衡树维护对应的单调队列,在转移时启发式合并即可。时间复杂度 O(N+MLog2M)O(N+MLog^2M)O(N...原创 2019-08-28 14:09:56 · 299 阅读 · 0 评论 -
【校内训练2019-07-09】探险队
【思路要点】考虑计算 fif_ifi 表示到达点 iii 后发现 iii 的一条邻边断开,最坏情况下到达 TTT 的的最短路。注意到图是无向图,可以从 TTT 出发建立一棵最短路树,则最坏情况显然是断开 iii 的父边的情况。枚举一条非树边 (x,y,w)(x,y,w)(x,y,w) ,则对于 x,yx,yx,y 路径上的一个非 Lca(x,y)Lca(x,y)Lca(x,y) 的点 ...原创 2019-07-09 14:23:05 · 401 阅读 · 0 评论 -
【LOJ3052】「十二省联考 2019」春节十二响
【题目链接】点击打开链接【思路要点】显然不同的子树分组相互独立,而根节点自成一组,因此合并子树应当将大小较大的块依次合并,并且可以用归纳法证明该策略的最优性。用堆维护各个块的大小,合并时采用启发式合并即可。时间复杂度等同于长链剖分的复杂度,为 O(NLogN)O(NLogN)O(NLogN) 。【代码】#include<bits/stdc++.h>us...原创 2019-06-17 21:04:29 · 346 阅读 · 0 评论 -
【省内训练2019-06-02】可爱
【思路要点】首先在后缀 TrieTrieTrie 上考虑本题,考虑枚举不同的位置在后缀 TrieTrieTrie 上对应的节点,则后接的字符串应当对应相同。那么,维护各节点 iii 子树中长度为 MMM 的字符串的后 M−depthiM-depth_iM−depthi 位的哈希值,则后接字符串对应相同即为哈希值对应相同,启发式合并即可更新答案。需要对哈希表进行整体加的操作,因此需要为每...原创 2019-06-04 16:40:55 · 342 阅读 · 0 评论 -
【省内训练2018-12-21】Connection
【思路要点】首先考虑某一种颜色,若该颜色在各连通块中的出现次数为 {x1,x2,...,xm}\{x_1,x_2,...,x_m\}{x1,x2,...,xm} ,则该颜色对答案的贡献应为 ∑i=1m∑j=i+1mxi∗xj=(∑i=1mxi)2−∑i=1mxi22\sum_{i=1}^{m}\sum_{j=i+1}^{m}x_i*x_j=\frac{(\sum_{i=1}^{m}x_...原创 2018-12-22 18:17:50 · 187 阅读 · 0 评论 -
【省内训练2018-11-23】Graph
【思路要点】离线询问,为每一条边找到一个删除时间。将过程倒过来,按照删除时间倒序加入每一条边。我们将加入的边分为两类,加入后连接两个不同的联通块的称为树边,剩余的边称为非树边。显然,树边的加入不会产生新的双连通分量,因此,我们可以预先将所有的树边加入图中,并处理出形成的森林中每个节点的深度等信息。之后,我们每加入一条非树边,就会将森林中一条树链上所有的节点合并起来,可以通过并查集实现...原创 2018-11-24 16:58:31 · 299 阅读 · 0 评论 -
【CodeChef】October Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【BBRICKS】**Beautiful Bricks【思路要点】上下两个砖块中,至多有一个黑色。连续的一段存在黑色的行共有两种放置的方案。枚举有几段连续的存在黑色的行,用组合数计算答案。单组数据时间复杂度 O(K)O(K)O(K) 。【代码】#include&amp;lt;bits/stdc++.h&amp;gt;using namespace ...原创 2018-10-21 10:46:08 · 535 阅读 · 0 评论 -
【CodeForces】CodeForces Round #504 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Single Wildcard Pattern Matching 【思路要点】 判断 SSS 的星号前后是否为 TTT 中不相交的前缀和后缀。 时间复杂度 O(N+M)O(N+M) O(N+M) 。 【代码】 #include&amp;amp;lt;bi...原创 2018-09-07 21:34:59 · 344 阅读 · 0 评论 -
【CodeForces】CodeForces Round #402 (Div. 1) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**String Game【思路要点】 显然可以二分答案。 然后判定ppp是否为删减后的ttt的子序列即可。 时间复杂度O(NLogN)O(NLogN)O(NLogN)。 【代码】 #include&lt;bits/stdc++.h&gt;...原创 2018-08-04 20:01:51 · 282 阅读 · 0 评论 -
【CodeForces1181E】A Story of One Country
题目链接点击打开链接题目解法由题设,不难得到如下算法:若 N=1N=1N=1 ,则有解。否则,试图找到一条不穿过矩形的水平 / 竖直直线,将矩形分为两类,分别递归处理。其时间复杂度为 O(N2LogN)O(N^2LogN)O(N2LogN) 。考虑优化,我们会将矩形两类,一类 xxx 个,一类 N−xN-xN−x 个,如果这么做的复杂度是 O(Min{x,N−x}×poly(Log))O...原创 2019-08-30 11:30:38 · 305 阅读 · 0 评论