随笔分类 - 数据结构
BZOJ 1030 [JSOI2007]文本生成器 (AC自动机 + DP)
摘要:1030: [JSOI2007]文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版。该软件可以随机生成一些文章―――总是生成一篇长度固定且完全随机的文章—— 也就是说,生成的文
阅读全文
BZOJ 1031 [JSOI2007]字符加密Cipher (后缀数组)
摘要:1031: [JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考。一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法。例如下图,可以读作: JSOI07 SOI07J OI07JS
阅读全文
BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)
摘要:1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,
阅读全文
BZOJ 1014 [JSOI2008]火星人prefix (Splay + Hash + 二分)
摘要:1014: [JSOI2008]火星人prefix Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀。比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 11 字符 m a d a m
阅读全文
BZOJ 1009 [HNOI2008]GT考试 (KMP + 矩阵快速幂)
摘要:1009: [HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。他的不吉利数学A1A2...Am(0<=Ai<=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2
阅读全文
BZOJ 1007 [HNOI2008]水平可见直线 (栈)
摘要:1007: [HNOI2008]水平可见直线 Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=-x; L3:y=0则L1和L2是可见的,
阅读全文
BZOJ 3110 K大数查询 (树套树)
摘要:3110: [Zjoi2013]K大数查询 Description 有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。 有N个位置,M个操作。操作有两种,
阅读全文
HDU 5618 Jam's problem again (cdq分治+BIT 或 树状数组套Treap)
摘要:题意:给n个点,求每一个点的满足 x y z 都小于等于它的其他点的个数。 析:三维的,第一维直接排序就好按下标来,第二维按值来,第三维用数状数组维即可。 代码如下: cdq 分治: 树套树:
阅读全文
51Nod 1376 最长递增子序列的数量 (DP+BIT)
摘要:题意:略。 析:dp[i] 表示以第 i 个数结尾的LIS的长度和数量,状态方程很好转移,先说长度 dp[i] = max { dp[j] + 1 | a[i] > a[j] && j < i },然后是数量,dp[i] = sigma(dp[j]) if dp[i] == dp[j] + 1。 如
阅读全文
POJ 2728 Desert King (最优比率树)
摘要:题意:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条路即可,建造水管距离为坐标之间的欧几里德距离,费用为海拔之差,现在要求方案使得费用与距离的比值最小,很显然,这个题目是要求一棵最优比率生成树。 析:也就是求 r = sigma(x[i] * d) / sigma(x
阅读全文
HDU 3247 Resource Archiver (AC自动机+BFS+状压DP)
摘要:题意:给定 n 个文本串,m个病毒串,文本串重叠部分可以合并,但合并后不能含有病毒串,问所有文本串合并后最短多长。 析:先把所有的文本串和病毒都插入到AC自动机上,不过标记不一样,可以给病毒标记-1,如果访问知道就知道不可行的,然后处理出两两串叠加的最小长度,这个要用bfs,在AC自动机上把这个处理
阅读全文
HDU 5957 Query on a graph (拓扑 + bfs序 + 树剖 + 线段树)
摘要:题意:一个图有n个点,n条边,定义D(u,v)为u到v的距离,S(u,k)为所有D(u,v)<=k的节点v的集合 有m次询问(0<=k<=2): 1 u k d:将集合S(u,k)的所有节点的权值加d 2 u k:询问集合S(u,k)的所有节点的权值之和 析:把这个图树成两部分,一个是一个环,然后剩
阅读全文
HDU 5956 The Elder (树上斜率DP)
摘要:题意:给定上一棵树,然后每条边有一个权值,然后每个点到 1 的距离有两种,第一种是直接回到1,花费是 dist(1, i)^2,还有另一种是先到另一个点 j,然后两从 j 向1走,当然 j 也可以再向 k,一直到1,但经过一个点,那么就会出多一个花费 p,问你每个点到 1 的最小距离的最大值是多少。
阅读全文
HDU 3341 Lost's revenge (AC自动机+DP)
摘要:题意:给定 n 个子串,然后给一个母串,让你对母串重排,然后问你最多含有多少个字串。 析:这个题很容易想到五维DP,这样的话,不但会MLE,而且连数组都不一定开的出来,里面有大量的无用的状态,所以我们把那四个字符出现的次数进行重新编制,假设A出现 a 次,C出现 c 次,G出现 g 次,T出现 t
阅读全文
UVa 12003 Array Transformer (分块)
摘要:题意:给定一个序列,然后有 m 个修改,问你最后的序列是什么,修改是这样的 l r v p 先算出从 l 到 r 这个区间内的 小于 v 的个数k,然后把第 p 个的值改成 k * u / (r - l + 1)。 析:分块,每块长度是sz,把每一块都排序。然后在每次修改的时候,只要计算出 l 和
阅读全文
HDU 3681 Prison Break (二分 + bfs + TSP)
摘要:题意:给定上一个 n * m的矩阵,你的出发点是 F,你初始有一个电量,每走一步就会少1,如果遇到G,那么就会加满,每个G只能第一次使用,问你把所有的Y都经过,初始电量最少是多少。 析:首先先预处理每个F,G,Y的最短距离,用 bfs 可以实现,然后再二分电量,进行判断,在进行判断时,dp[s][i
阅读全文
POJ 2778 DNA Sequence (AC自动机+DP+矩阵)
摘要:题意:给定一些串,然后让你构造出一个长度为 m 的串,并且不包含以上串,问你有多少个。 析:很明显,如果 m 小的话 ,直接可以用DP来解决,但是 m 太大了,我们可以认为是在AC自动机图中,根据离散中的矩阵的幂可以表示 从 i 到 j 需要 x 步的有多少条。比如A[1][2]^5 = 10,表示
阅读全文
HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)
摘要:小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2024 Accepted Submission(s): 556 Prob
阅读全文
UVa 11297 Census (二维线段树)
摘要:题意:给定上一个二维矩阵,有两种操作 第一种是修改 c x y val 把(x, y) 改成 val 第二种是查询 q x1 y1 x2 y2 查询这个矩形内的最大值和最小值。 析:二维线段树裸板。 代码如下:
阅读全文