- 博客(27)
- 收藏
- 关注
原创 HDU 5046(舞蹈链)
题意:二维平面上有n个点,要求选取至多k个点,使得每个点到离它最近的点的距离最大值最小。 解法:二分距离,用重复覆盖判断选出的点数。 但这个题直接求可以选出的最少点数会t,所以要在剪枝的时候加一点特殊的技巧。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>
2016-03-03 18:31:27 324
原创 HDU 4979(舞蹈链+打表)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106836#problem/J) 题意:在0 ~ 2^n-1中,选出尽量少的二进制位有m个1的数,要求包含全部二进制位含有r个1的数。n<=8。 解法:就是一个重复覆盖,但是不管怎么剪枝都会超时,所以要打表交上去。 这是打表的程序#include <cstdio>#include
2016-03-03 18:26:50 396
原创 HDU 3335(舞蹈链)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106836#problem/I) 题意:在n个数中,选出最多的数,使他们俩俩不能被整除。 解法:将问题转化成删除最少的数,使其满足题意。若i可以被j整除,则i,j不能同时被选,使列a向i,j连边。#include <cstdio>#include <cstring>#include
2016-03-03 17:45:47 410
原创 舞蹈链模板题汇总
舞蹈链有两种模型,精确覆盖,多重覆盖。精确覆盖HUST 1017//#pragma comment(linker, "/STACK:1024000000,1024000000")#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>#include <vector
2016-03-02 20:30:57 706
原创 HDU 5405(树链剖分)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106364#problem/D) 题意:一棵树,点权值,两种操作,1.修改u的权值成w,2.查询u,v,求w[i]*w[j],i,j满足i,j的路径与u,v相交。 解法:先求不相交的。 对于每个节点u , 记录两个值 1. sum[u] u子树w之和。
2016-03-02 20:12:54 527
原创 HDU 4718(树链剖分)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106364#problem/C) 题意:一棵树,点权值,Q询问,询问a到b的路径上最长的一段上升序列。 解法:树链剖分点操作,是带方向的,并且必须是a到b,不能是b到a。//#pragma comment(linker, "/STACK:1024000000,1024000000")
2016-03-02 19:57:45 740
原创 HDU 5458(树链剖分)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106364#problem/B) 题意:给一个无向图,两种操作,删除一条边,询问两点之间关键路径的数目。 关键路径,即删除这条边,两点就不联通了。保证图一直联通。 解法:先在最后的图上跑一颗生成树。每有一条其他的边,就对路径上的所有边+1。所以就存在两种操作,对某一段-1,查
2016-03-02 19:50:17 293
原创 HDU 5293(树链剖分)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106364#problem/A) 题意:给定一棵树,一些链,选出最多的链不相交。 解法:定义 sum[u] = sim(dp[v]) ( v = son[u] ) dp[u]为u这颗子树,最多能选的链数。 当有一条链a,b,lca(a,b)=u
2016-03-02 19:40:44 305
原创 树链剖分模板题汇总
记录几个树链剖分的模板题,包括点操作,边操作和带方向的操作。点操作HDU 3966#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <stack>#include <set
2016-03-02 19:22:20 1716
原创 SPOJ NSUBSTR(后缀自动机)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106071#problem/C) 题意:问s,分别输出1~len的子串最多出现次数。 解法:构造后缀自动机,然后拿step和right搞一搞就好了。#include <cstdio>#include <cstring>#include <iostream>#include <al
2016-03-02 19:05:51 330
原创 SPOJ LCS2(后缀自动机)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106071#problem/B) 题意:给定n个串,求最长相同子串。 解法:对第一个构造后缀自动机,记录la[p],为前k个串在这以点的最常匹配长度。#include <cstdio>#include <cstring>#include <iostream>#include <a
2016-03-02 18:59:40 409
原创 SPOJ LCS(后缀自动机)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106071#problem/A) 题意:问串A,B的最长相同子串 解法:直接构造A的后缀自动机,搞一波lcp就好了。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#includ
2016-03-02 18:56:29 471
转载 CodeForces 235C(后缀自动机)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105904#problem/F) 题意:给定串s,Q组查询字符串a,问s有多少子串可由a循环构成。 解法:对s构造后缀自动机,将每个a复制成aa进行查询,要注意,s的每个子串可能和a的很多循环串相同,但只能算一次。#include <cstdio>#include <cstring>
2016-03-02 18:52:47 393
原创 POJ 3415(后缀自动机)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105904#problem/E) 题意:给定字符串A,B,int K。问存在多少个(i,j,k)满足A(i,i+k)=B(j,j+k) && k>=K。 解法:把A构造后缀自动机,然后求出right数组。一开始不知道怎么topo排序,看了别人的博客才知道由这个简单的topo方法。然后用
2016-03-02 18:08:54 388
原创 HDU 4436(后缀自动机)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105904#problem/C) 题意:n个串由’0’~’9’组成,问所有不相同子串对应的十进制数之和。 解法:把所有的串连起来,构造好后缀自动机,xjb推个公式就好了。要注意的是,子串不允许出现前导0,所以在源点那里不要转移0就好了。还有就是处理的时候要先对节点按step做一遍top
2016-03-02 17:46:25 532
原创 HDU 4622(后缀自动机)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105904#problem/B) 题意:串s,|s|<=2000,Q组查询,查询s(l,r)中有多少不想同子串。 解法:O(n^2)做法。分别从0~len-1为起点作后缀自动机。因为后缀自动机是支持 增 量的。每次加入一个点np,step[np] - step[pre[np]]即为增
2016-03-02 17:38:47 439
原创 UVA 719(后缀自动机/最小表示法)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105904#problem/A)题意:给定字符串s,问s循环后的最小串。即s为“BBACD”,答案为“ACDBB”。 解法:最小表示法直接就能解,为了写板子,又用后缀自动机写了一遍。 最小表示法:#include <cstdio>#include <cstring>#include
2016-03-02 17:31:47 651
原创 POJ 3415(后缀数组)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/J) 题意:字符串A,B,问A,B有多少相同子串。 解法:后缀数组+线段树,+优先队列也行。我写的是+优先队列的版本。#include <cstdio>#include <cstring>#include <iostream>#include <alg
2016-02-20 21:50:44 278
原创 POJ 2774(后缀数组)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/I) 题意:寻找字符串A,B的最长相同子串 解法:构造个后缀数组,随便搞一搞就好了。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include
2016-02-20 21:28:52 249
原创 POJ 3693(后缀数组)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/H) 题意:给定字符串s,寻找其子串T,使得T循环节数最多 (len(T)/len(T的最小循环节)最大)。 解法:还是枚举循环节长度,那么T的第一个循环节一定包含0,T,2T…其中的一个。时间复杂度就是O(nlgn). 同样套路的题还有UVA 1082
2016-02-20 21:18:17 333
原创 POJ 2406(后缀数组/KMP)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/G) 题意:寻找最小循环节 解法:后缀数组,KMP都能做,比较懒,只写了后缀数组的版本。其实还是写KMP比较好。。。#include <cstdio>#include <cstring>#include <iostream>#include <algo
2016-02-20 20:35:06 365
原创 URAL 1297(后缀数组/Manacher算法)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/F) 题意:寻找最长回文子串 解法:Manacher裸题,也能用后缀数组#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath
2016-02-20 20:29:00 274
原创 SPOJ SUBST1(后缀数组)
这里写链接内容 题意:询问字符串s的子串个数 解法:后缀数组裸题#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <stack>#include <set>#incl
2016-02-20 20:18:41 304
原创 POJ 3261(后缀数组)
题意:寻找出现至少K次的最长子串 解法:后缀数组裸题#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <stack>#include <set>#include <ma
2016-02-20 20:15:49 234
原创 POJ 1734(后缀数组)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/C) 题意:寻找最长的子串,在s中出现至少两次,子串所有字符可以全部+n/-n。 解法:这种问题统一解法,构造T[i] = S[i] - S[i-1]。#include <cstdio>#include <cstring>#include <iostre
2016-02-20 20:08:10 221
原创 UVA 10829(后缀数组)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/B) 题意:有点复杂,大意是在串s中找到形如’UVU’的子串,其中V长度给定,求U的最大长度。 解法:不满足二分的性质,只能枚举U的长度,注意到,当U的长度为L时,U必定包含0,L,2L……这些位置其中之一,因此只需枚举这些位置,时间复杂度为nlgn.#in
2016-02-20 20:02:27 301
原创 UVA 11107(后缀数组)
(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105595#problem/A) 题意:给定n个字符串,求出最长子串,在超过n/2的串中出现过。 做法:后缀数组+尺取#include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>#inc
2016-02-20 19:54:19 298
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人