当前搜索:

bzoj2553 [BeiJing2011]禁忌(ACAM+概率dp+矩阵快速幂)

先把所有禁忌串建成ACAM,搞出Trie图。然后我们首先对于一个字符串,他的伤害是多少,就可以转化成选最多的线段两两不相交。这个问题可以贪心地按右端点排序后能取就取。体现在ACAM上就是走到一个结束节点就返回根,++ans。f[i][j]表示长度为i的串匹配到ACAM的节点j的伤害期望值。然后长度...
阅读(7) 评论(0)

bzoj1064 [Noi2008]假面舞会(图论+dfs)

图论神题orz如果这个图有环,那么最大的就是所有环长的gcd。这里有环不仅仅指有向图上的环,一些边反向后可以成环的也算(因为这种相当于两条收尾相同的链,它隐含着一个长度为两条链的长度的差的环)。为了方便,我们把有向边x->y,拆成正向边x->y,1和反向边y->x,-1。这样环长...
阅读(2) 评论(0)

CF633G Yash And Trees(线段树+bitset)

首先我们用dfs序把子树转化成区间,我们就是要维护区间加法和区间%m不同质数的个数。 因为m只有1000,我们直接暴力的每个节点维护一个大小为1000的bitset即可。 bitset的一位只占1bit,因此内存为1000/8字节。所以空间复杂度就是O(4n∗1000/8)O(4n*1000/...
阅读(12) 评论(0)

bzoj1063 [Noi2008]道路设计(树形dp)

一条路径可以往上走也可以往下走,所以一个点最多连出两条边。 考虑f[x]为x个点的树的最大答案,则f[x]<=f[x/3]+1,所以最大答案也是log3n级别的,大概在10个左右。 因此我们就可以树形dp了,f[x][j][0/1/2]表示以x为根的子树中不便利值均<=j,x向儿子...
阅读(7) 评论(0)

bzoj5209 [Tjoi2012]防御(线段树)

维护区间最小值,也就是盾的剩余护甲,如果有<=0的了就暴力下放到这个点。然后每次下放看叶子是不是盾已经破了,决定是*2还是不乘。因为每个盾最多破一次,所以总复杂度是ok的。 O(nlogn)O(nlogn)
阅读(6) 评论(0)

bzoj2288【POJ Challenge】生日礼物(贪心+堆)

首先我们把连续的正数/负数合成一个,因为显然要取都取。 然后开头结尾的负数可以去掉了,我们一定不会取。 这样我们就得到了正负正负…正的一个序列。记正数有cnt个,则若cnt<=m,把正数全取了即可。否则,m=cnt-m,我们需要做出一些牺牲。可以删去一个正数或者选上一个负数来使得两边的正...
阅读(8) 评论(0)

bzoj1150 [CTSC2007]数据备份Backup(贪心+堆)

这题好神啊orz 我们首先肯定是取相邻的两个点连边。 于是我们可以先处理出每相邻两点的距离,然后由于不能选同一个点,我们就当于是在n-1个数中选k个,彼此不能相邻,使得和最小。 我们贪心地取最小,每次取了a[x],删掉左边的右边的和a[x],然后加进去一个a[l]+a[r]-a[x],表示反...
阅读(21) 评论(0)

bzoj4891 [Tjoi2017]龙舟(pollard-rho+素数检测)

这题主要问题在于我们要求一个大数对大数的逆元。 我们考虑把大模数分解质因数之后就可以O(mlogV)O(mlogV)的上下约分,然后看分母是否和大模数互质,以判断是否存在逆元。然后这个大数如何质因数分解呢?我们可以用pollard-rho+miller-rabin来做。复杂度O(n1/4)O(n...
阅读(8) 评论(0)

bzoj4888 [Tjoi2017]异或和(按位+树状数组)

我们首先做出前缀和s[i],那么一个连续和就可以表示成s[i]-s[j],0<=j< i 我们考虑s[i]的第k位-s[j]之后为1的有多少个,如果奇数个就对答案有贡献。如果s[i]的第k位为1,s[j]需要满足第k位为0且前k-1位小于s[i]的前k-1位,或者第k位为1,且前k-...
阅读(6) 评论(0)

bzoj4890 [Tjoi2017]城市(树的直径+枚举+树形dp)

我们枚举切掉的那条边,分成了两个子树,分别dfs一遍求出直径,再dfs一遍求出中心(即距离最远点最近的点),那么把这两棵子树连起来之后的直径最小就是max(d1,d2,r1+r2+w)。 复杂度O(n2)O(n^2)
阅读(70) 评论(0)

bzoj4889 [Tjoi2017]不勤劳的图书管理员(线段树套权值线段树)

相当于动态维护带权逆序对。 交换x,y位置的数,只会对他们之间的数产生影响。分类讨论即可。我写的线段树套权值线段树,卡空间,需要写垃圾回收qaq 复杂度O(nlog2n)O(nlog^2n)
阅读(18) 评论(0)

bzoj2725 [Violet 6]故乡的梦(最短路树+线段树)

每次询问删去一条边之后的S-T最短路。 我们首先搞出最短路树。然后对于每一条在S-T最短路上的边都处理出删掉他之后的答案。类似bzoj4400然后对于询问O(1)回答即可。此题需要注意一些特判:比如S==T S,T一开始就不联通。
阅读(10) 评论(0)

bzoj4400 tjoi2012 桥(最短路树+线段树)

首先我们建出最短路树。 可以发现要删的边一定在最短路树上1-n的路径上。 我们考虑删掉一条边x-y,那么剩余的最短路一定是1-A-B-n的形式。 其中1-A一定是最短路上一部分,不能过边x-y,因此A一定不在y的子树里。 B-n一定是最短路上一部分,不能过边x-y,因此B一定在y的子树里。...
阅读(19) 评论(0)

bzoj3495 PA2010 Riddle(2-sat+建图优化)

我们把每个点当不当首部作为两种选择,得到了一个很显然的2-sat。但是对于m个点中有且仅有一个点当首都这个条件我们的建边是O(n^2)的,gg我们考虑如何优化这个建图,如果我们选择第i个点作为首都,则1~i-1都不能当首都,i+1~m也都不能。于是我们想到前缀和后缀和优化,新建2m个点,分别表示1...
阅读(10) 评论(0)

bzoj2806 [Ctsc2012]Cheat(SAM+单调队列优化dp)

首先我们建出广义SAM,然后对于每一个询问串S,我们处理出len[i],表示最大的S[i-len[i]+1…i]可以被匹配。我们二分答案,dp判定,f[i]表示前i个字符最多匹配多少位。 f[i]=max{f[i−1],f[j]+i−j|i−len[i]<=j<=i−L}f[i]=m...
阅读(8) 评论(0)

bzoj1823 [JSOI2010]满汉全席(2-sat)

挺裸的2-sat
阅读(15) 评论(0)

CF455C Civilization(树的直径+并查集)

首先求出每个连通子树的直径,注意记在根上,可以有向的合并。 然后就是并查集了。合并两个连通子树,使得新直径最小,考虑新直径如果横跨两块,则最优的显然是把两块的直径中点连起来。 所以合并之后直径的最小值就是max(max(d1,d2),(d1+1)/2+(d2+1)/2+1)
阅读(12) 评论(0)

CF734E Anton and Tree(树的直径)

我们每次相当于给一个极大同色连通块变色。 因此把同色连通块缩点。得到一棵树,以任意点为根,我们就得到了一颗邻层异色的树。我们只要从根开始,不断变色就可以把整棵树缩成一个点,需要最大深度次。 而我们希望最小,也就是要树的最大深度最小。 以树的直径的中点为根时,最大深度最小,为len+1/2。
阅读(14) 评论(0)

hiho1381 Little Y's Tree(dfs序+线段树+树的直径)

给定一棵树,边权为正整数。每次询问砍掉k条边之后,k+1个连通子树的直径和是多少。 我们考虑用线段树来维护连通子树的直径。 考虑如何合并两个连通子树的直径,即我们知道了连通子树的直径分别为x1-y1,d1;x2-y2,d2,我们要把这两个连通子树合并起来。那么新的直径的端点一定是这四个点之二。...
阅读(19) 评论(0)

bzoj4582 [Usaco2016 Open]Diamond Collector(dp)

县用一个指针处理出dp[i],表示以a[i]为最小值最长往后延伸距离,然后后缀最大值优化一下即可。
阅读(11) 评论(0)
    个人资料
    持之以恒
    等级:
    访问量: 9万+
    积分: 1万+
    排名: 2009
    文章分类
    文章存档
    最新评论