自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

辗转山河弋流歌

暂停更新和答疑

  • 博客(395)
  • 收藏
  • 关注

原创 【BZOJ4032】【HEOI2015】最短不公共子串 后缀自动机

题解:T1:我们按长度bfs所有的串,对于每个串记录A串中终点位置、B串中终点位置(B串中位置由B的后缀自动机中节点标号表示)、长度——(x,y,l)(x,y,l)。 然后 (x,y,l)(x,y,l) 可以 O(1)O(1) 转移到 (x+1,son[y,stringax+1−′a′],l+1)(x+1,son[y,stringa_{x+1}-'a'],l+1) 时间复杂度 O(

2015-04-27 17:40:48 2967

原创 【自用】有上下界的网络流

无源汇网络流(有向图):最终的最大流需要是一个循环体,流量在内部循环流动。必须流和自由流的定义:首先设每条边上界为flow,下界为low,那么就存在low的必须流和flow-low的自由流。「无源汇」有上下界的「可行」流:建图:记录每个点的所有流入的必须流in和所有流出的必须流out。 然后新图先设立一个超级源点和一个超级汇点, 对于每条边,保留其自由流的容

2015-04-24 09:39:19 1572

原创 【USACO 2015 Open Gold】Palindromic Paths 动态规划

题解:f(i,j,k,l)f(i,j,k,l) 表示起点横着走 ii 步,竖着走 jj 步,终点竖着走 kk 步,横着走 ll 步时的回文方案数。 然后跑动态规划时 f(i,j,k,l)f(i,j,k,l) 可以更新 f(i+1,j,k+1,l)、f(i+1,j,k,l+1)、f(i,j+1,k+1,l)、f(i,j+1,k,l+1)f(i+1,j,k+1,l)、f(i+1,j,k,l+

2015-04-23 15:38:15 2091

原创 【自用】OI知识点总结

看目录就好了。不用看具体部分网络流二分图最大匹配最小点覆盖最小边覆盖最小路径覆盖最大独立集最大流上下界最大流最小割全局最小割费用流上下界费用流线性规划转费用流最大权闭合图RMQ优化建图单纯形字符串相关hashKMP扩展KMPMa

2015-04-23 09:13:46 2564

原创 【BZOJ3996】【TJOI2015】线性代数 最小割

题解:题意部分注释:最终的矩阵 DD 长宽都1,所以其实要求的是一个数 首先 (A×B−C)×AT=A×B×AT−C×AT(A \times B-C)\times A ^ T = A \times B \times A ^ T - C \times A^T 然后发现 左边式子 AiA_i 和 ATj A^T_j 都选的时候才会得到 Bi,jB_{i,j} 的价值 如果 ATiA^T_

2015-04-22 20:35:13 1739

原创 【BZOJ4002】【JLOI2015】有意义的字符串 推公式+矩阵乘法

题解:公式推导部分:见大爷博客http://blog.csdn.net/popoqqq/article/details/45148309公式:fi=b×fi−1+ (d−b2)4ai−2 f_i=b \times f_{i-1}+\frac {~(d-b^2)} {4}a_{i-2}f0=2,f1=b f_0=2,f_1=b矩阵: ⎡⎣⎢fi 0 fi−10⎤⎦⎥= ⎡⎣⎢f

2015-04-21 18:58:50 1765

原创 【BZOJ4004】【JLOI2015】装备购买 线性基

题解:基本裸题,不写题解了。看这篇博客吧。 【BZOJ3105】【cqoi2013】新Nim游戏 线性基神马的 http://blog.csdn.net/vmurder/article/details/42560691 这篇博客没写拟阵部分,只写了线性基部分,刚刚好。 哎考试时时间都喂T2了。这种裸题竟然没去AC它哭死啊啊啊啊。对了,据BK说这道题可能卡精度,然后就需要一些黑科技。

2015-04-21 15:32:04 2862 2

原创 【BZOJ4003】【JLOI2015】城池攻占 可并堆

题解:傻题随便上数据结构都能搞过。 可并堆或者启发式合并splay都可以。 考试时状态太差一个裸模板启发式合并splay调了3h最后还爆零了Qwq、200行!!!!!! 然后可并堆又快又短,细节又少(然后特么也全都是模板内容,一点非模板代码都没有……),完虐启发式合并。另外这道题可以用 f(i,j)f(i,j) 表示 从点 ii 到其第 2j2^j 个父亲需要的最小战斗力,这种做

2015-04-21 14:29:02 2889

原创 【BZOJ1861】【Zjoi2006】Book 书架 Splay

题解:随便来一种数据结构就好啦。 这里写的是平衡树(一眼直接想到,而且发现很水)注意。。呃或许也不用太注意。 就是那个Insert操作要你干什么千万要看明白……代码:#include #include #include #include #define N 101000#define ls son[x][0]#define rs son[x][1]

2015-04-21 09:40:54 1598

原创 【BZOJ4007】【JLOI2015】战争调度 war 搜索

题解:暴力是什么样呢? O(21023)O(2^{1023}) 是也。 然后能过的算法是什么样呢?首先对于一棵子树,如果根节点到整棵树的根节点这一部分节点的【挂机/送人头】的状态已经确定了,那么左子树的最优答案和右子树的最优答案就都是独立的,所以我们在这个时候就可以对左子树和右子树分别进行搜索。然后 f(i,j)f(i,j) 表示节点 ii 里有 jj 个平民送人头 ※※ 且 ii

2015-04-20 09:27:37 3747 4

原创 【自用】二分图相关总结

概念:最大匹配:二分图上最大对数的点对使得对之间有连边,且任意两点对4个点之间互不相同 最大匹配:无视上面那条,其实就是你找一个点,然后给它连一个有边连过去且没匹配过的点,然后就称得到一个匹配。最大匹配就是匹配数最大是多少。 最大独立集:二分图上最大点数的子点集使得两两之间没有连边 最小边覆盖:二分图上最小条数的子边集使得所有点都被且仅被一条边覆盖 最小路径覆盖:拓扑图上最小条数的路径

2015-04-17 09:34:53 1170 1

原创 【BZOJ2303】【Apio2011】方格染色 异或方程+并查集

题解:首先我们发现对于 ai,ja_{i,j} 有下列式子: ai,j xor ai+1,j xor ai,j+1 xor ai+1,j+1==1a_{i,j} ~xor\ a_{i+1,j} ~xor\ a_{i,j+1} ~xor\ a_{i+1,j+1} == 1 然后推导得到对于 ai,ja_{i,j} 有下列式子: a1,1 xor a1,j xor ai,1 xor

2015-04-16 21:52:19 3378 2

原创 【BZOJ1912】【Apio2010】巡逻 树上最长链(才不是树的直径呢)

题解:对于 k==0k==0 的情况: 我们发现遍历一棵树最后回到原点,那么对于所有的边,我们都是走过去,再走回来。 答案 (n−11)(n-1对于 k==1k==1 的情况 设每条边长度为1,然后树上找最长链,然后这条链走过去就不再一步步往回了,直接从链底连一条边去链顶,然后链中间连的那些点,直接走过去再走回来,它们那些边的答案是不变的。 答案 (n−11)−(链长度)+1(n-

2015-04-15 17:47:41 2943 3

原创 【BZOJ2588】【Spoj 10628.】 Count on a tree 可持久化线段树+lca

题解:对于每个树上节点存一个版本的可持久化线段树,为它到根节点上所有权值的权值线段树(需要离散化)。 然后对于每次询问,这条链(a,b)的线段树就是:线段树a+线段树b−线段树lca−线段树falca线段树_a + 线段树_b - 线段树_{lca} - 线段树_{fa_{lca}} 然后线段树上求第k小啦。代码:#include #include #include

2015-04-14 22:05:17 2361

原创 【BZOJ2298】【HAOI2011】problem a 动态规划

题解:一句话 (a,b)(a,b) 可以理解成一个线段 (a,n−b](a,n-b] 。 然后排个序去下重,最后一个线段的权值 xx 就是表示 这 xx 人互不冲突,一起算。然后动态规划求若干条不相交线段的权值最大值,最后用总人数减去就行了。 fif_i 表示有 ii 人时最大权值。 fseqi→ r=max  (    fsi→ r    ,    fsi→ l+si→ x

2015-04-10 14:41:10 1361

原创 【BZOJ3922】Karin的弹幕 线段树&暴力

题解:我们对每个等差数列维护一棵线段树。 比如等差为 55 , nn 为 1717 ,则线段树内节点顺序为: 1,6,11,16,2,7,12,17,3,8,13,4,9,14,5,10,15。1,6,11,16,2,7,12,17,3,8,13,4,9,14,5,10,15。然后查询的时候到对应线段树内查询一段就好了。 然后等差太大 (>5)(>5) 就不用维护线段树了,数量不会太

2015-04-10 13:52:39 1436

原创 【BZOJ3943】【Usaco2015 Feb】SuperBull 最大生成树 Prim

题意:给n个数,然后每次可以选择一对尚存活的数,将其异或和加和到答案中,然后删掉其中一个数,直到只剩一个数为止。题解:花样教人理解最小生成树,一片苦心啊,不会最小生成树的可以从这开始理解2333。 对了,数据范围有点大,完全图 kruscalkruscal 多个 log log 估计过不去。代码:#include #include #include #include

2015-04-09 15:49:20 1640

原创 【BZOJ3940】【Usaco2015 Feb】Censoring AC自动机

题意:题意同BZOJ3942,不过要删除的串是多串 http://blog.csdn.net/vmurder/article/details/44959895题解:……思路一模一样,除了不用kmp用AC自动机代码:#include #include #include #include #include #define N 101000#define T 2

2015-04-09 15:11:58 1813

原创 【BZOJ3942】【Usaco2015 Feb】Censoring KMP

我猜的题意(已经AC):有一个S串和一个T串,长度均小于1,000,0001,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程。题解:用 KMPKMP 判断当前U串最后一个字母加进来以后有多少字符匹配。代码:#include #include #include #include #define

2015-04-09 14:42:07 2164

原创 【BZOJ3907】网格 组合数,补集转换

题解:     ~~~~~ 首先从 (0,0)(0,0) 到 (n,m)(n,m) 是右走 nn 步, 上走 mm 步。方案数是在 nn 个数中 n+1n+1 个空中插 mm 个数,组合数是Cmn+mC_{n+m}^m。      ~~~~~ 然后从中减去穿过 y=xy = x 这条线的那些方案数就好了。     ~~~~~ 但是这个很难求,而若要求 [ 不经过 ] 则就可以有特别的技

2015-04-08 18:03:22 2120

原创 【BZOJ3932】【CQOI2015】任务查询系统 可持久化线段树

题解:首先肯定要用线段树。 如果没有强制在线,那么直接把询问排个序然后按秩插入、删除、查询。普通线段树就好了,但是这道题强制在线,就需要可持久化线段树了。线段树的每个区间记录[x:这段区间有的权值总和]、[n:这段区间有多少个权值][x:这段区间有的权值总和]、[n:这段区间有多少个权值] 然后每个版本表示一个时间点的线段树。 这道题每个版本可能有多个节点被修改,所以我们可以先当成多

2015-04-08 10:44:20 1681

原创 【POJ3164】Command Network 最小树形图模板题 重修版

我以前的版本算法构造过程以及傻叉代码+弱版注释见以前博客 http://blog.csdn.net/vmurder/article/details/38819711最小树形图:名词解释:       ~~~~~~~其实就是有向图的最小生成树,然后需要有一个根(一般默认为1),如果是无根最小树形图,我们可以牺牲时间复杂度, O(n)O(n) 枚举根跑最小树形图。算法流程

2015-04-08 08:54:41 1822

原创 【BZOJ3931】【CQOI2015】网络吞吐量 最短路+网络流

题解:……两遍最短路然后判断哪些边可以在某条最短路上,然后加到网络流图中。 然后题意是一个点经过流量有限制,拆点就好。然后有重边Qwq(调了好久。。。) 然后或许有自环,不过这并不影响什么。代码:调试过程中代码风格已经狗一样。 看到 long long i;i#include #include #include #include #include #defi

2015-04-07 16:28:15 1594

原创 【BZOJ3916】【Baltic2014】friends 暴力

前言妈呀我调了两个多小时, 就特么因为一个运算符优先级的问题?……!!! 太弱了。你们D我吧,那道题的提交都是我刷上去的QwqQwq题解首先S串如果存在,一定是U串(长度姑且设为2n+1,偶数则直接impossible)的[1,n]或者[n+2,2n+1]。。 然后我们可以暴力匹配,允许一次失配(就是第一次失配就跳过接着匹配。) 然后如果匹配完全串了,就是一种可行S串。然后

2015-04-05 23:59:06 1808

原创 【BZOJ3926】【Zjoi2015】诸神眷顾的幻想乡 广义后缀自动机

链接:#include <stdio.h>int main(){ puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44891009");}题意、题解、数据、出题人标程http://wjmzbmr.com/archives/zjoi-2015-day-1%e9%a2%98%e8%

2015-04-05 20:51:43 2344

原创 【BZOJ3622】已经没有什么好害怕的了 动态规划+容斥原理

题解:首先我们给AA数组(糖果)和BB数组(药片)从小到大排个序。 lastilast_i 表示一个极大值 xx 使得 BxAiB_x 。 f(i,j)f(i,j) 表示枚举到第 AiA_i 时,有至少 jj 对匹配,使得 A∗∗∗>B∗∗∗A_{***}>B_{***} 然后枚举到 AiA_i 不代表也必须只能使用 BiB_i 以及其前的B数组元素。f(i,j)=f(i−1,j)+

2015-04-02 19:20:33 2745 3

原创 【BZOJ1095】【ZJOI2007】Hide 捉迷藏 线段树维护括号序列 数据结构的压缩。

题解:首先由于此题太神以至于我其实还不会这道题,所以不妨介绍一下括号序列维护树构。其实都是假的,就是一个点被扫到入栈的时候,序列加一个左括号,然后加入一个字符(可以不加),点出栈的时候就加一个右括号。然后两点间距离就是两点的在序列的位置中间那一堆括号里,删掉一些匹配的括号后的答案,比如 )(()()(()( ,最后就变成了 )(()(( ,表示左端点需要向上走一步,右端点需要向上走两步

2015-04-02 11:18:14 1675

原创 【BZOJ3901】棋盘游戏 局部暴枚取优

~~~貌似是wyfcyx以前出过的题?题解:      ~~~~~~那个首先暴力的话并不是O(217)O(2^{17}),而是O(217∗17)O(2^{17*17})。       ~~~~~~然后我们分析怎么过此题。      ~~~~~~首先我们发现其实搜索的话,有好几部分都是独立的。       ~~~~~~发现所有的方形都经过中间一行,所以我们可以先O(217)O(2

2015-04-01 01:43:28 1424

原创 【BZOJ3910】火车 LCA+并查集

题解:首先找两点之间路径可以用倍增LCA。 然后标记哪个点走过可以用并查集,均摊下来最后是线性的。代码:#include #include #include #include #define N 501000#define LOGN 20using namespace std;struct Eli{ int v,next;}e[N1];int head

2015-03-31 16:08:26 1512

原创 【BZOJ3550】【ONTAK2010】 Vacation 线性规划转费用流

题解:我依然只会做,不会证。 如果初学者,可以一览,想深究,请移步。 After all,i am a Juruo at present.After\ all, i\ am\ a\ Juruo\ at\ present.      ~~~~~首先我们可以有基础的线性规划:每连续nn点最多选kk个。 转换成数学模型: (其中 aa 数组表示选(1)与不选(0),而 tt 数组则是辅助

2015-03-30 14:08:37 1715

原创 【BZOJ2668】【cqoi2012】交换棋子 费用流

前言:本来以为这种双限制流量的方法很通用很好用,所以没有去写那个一个点拆成俩的奇葩做法……但是后来我发现,这种一个点拆成三个的方法没有任何意义,它只是针对了这道题的特殊性质噗。好像并不能拓展。题解:首先图转化成源点往开始图的黑点(当然你要用白点也不是不行)流流量,最终从结束图的黑点流向汇点。这个应该都能想到。然后关键是怎么在流过一次后同时限制两个点。 这也是我所想知道的……可是,

2015-03-28 16:53:22 1749

原创 【BZOJ3629】【JLOI2014】聪明的燕姿 dfs 素数筛

题解:我们发现把一个数分解质因数以后然后可以根据每种质因数的个数算出这个数的约数和。所以我们可以暴力拆解每个数,根号时间复杂度分解。 就是枚举每种质数它用了多少,然后这个数除一下再往下一层深搜。代码:#include #include #include #include #define N 50100using namespace std;int prime[N],cnt

2015-03-28 09:19:09 1533

原创 【BZOJ3211】花神游历各国 树状数组 并查集 均摊分析

题解:一个点开几次方就没啦。所以我们只需要修改不是0或者1的点就行了。 均摊基本O(n)O(n)。 然后用并查集维护一个点右边第一个不是0的数。手写读入果然高大上。卡rank神器。 顺便Orz一下wys大神。代码:#include #include #include #include #include #define N 100100using namespace

2015-03-27 23:53:36 1276

原创 【BZOJ2751】【HAOI2012】容易题(easy) 快速幂快速乘

题解:询问只有10万个,所以有相同性质的连一块的点很多。 所以我们把10910^9点分成最多2∗1052*10^5块。然后就随便乱搞了。分成2∗1052*10^5块的过程是先把点排个序,然后就对每个点暴力往下删了。 然后分完了以后就是把所有的点的选择个数xx乘起来就行了。长度为yy那就乘xyx^y然后可能会爆,所以需要快速乘,请见mul部分。代码:#include #

2015-03-27 22:40:34 1573

原创 【BZOJ2435】【Noi2011】道路修建 树形DP

题解:树形DP记录size。然后每个子树回来是边的两边数量是size子节点size_{子节点}和n−size子节点n-size_{子节点}代码:#include #include #include #include #define N 1001000#define inf 0x3f3f3f3fusing namespace std;struct Eli{ i

2015-03-26 20:43:29 1983

原创 【BZOJ2427】【HAOI2010】软件安装 tarjan+树形背包DP

题解:首先它可能有环。所以先tarjan缩点。 然后跑树形背包。代码:#include #include #include #include #define N 120#define M 600using namespace std;struct Eli{ int v,next;}e[M];int head[N],cnt;inline void ad

2015-03-26 20:23:49 1668

原创 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演+分块+前缀和

莫比乌斯反演公式若Fn=∑d|nfdF_n =\sum_{d|n} f_d 则fn=∑d|nFnd∗μdf_n = \sum_{d|n} F_{\frac n d}*\mu_d 其中μ\mu是莫比乌斯函数,跟FF和ff无关。莫比乌斯函数当d=1d=1时: μd=1\mu_d = 1 当dd可以被拆解成kk个质因数之积且这些质因数两两不同时: μd=(−1)k\mu_d =

2015-03-26 10:56:39 1539

原创 【BZOJ2440】【中山市选2011】完全平方数 二分+容斥+莫比乌斯函数线性筛

题解:给出PoPoQQQ大爷的题解链接: http://blog.csdn.net/popoqqq/article/details/42076037 我太弱,可以直接看大爷的不用看我的。首先整体思想上我们可以二分check前x个数中有多少个符合要求的数。 然后这个怎么check呢?发现我们枚举每个数,看范围内是它的平方的倍数的数有多少个就行了。然后发现容斥一下,有些数是要加的,而有些

2015-03-26 10:02:10 1215

原创 【BZOJ2282】【Sdoi2011】消防 树的直径+双指针+单调队列 有一系列乱七八糟的证明

题解:首先表示这个代码是线性的,是怎么构造数据也卡不住的! 而网上普遍流行的那个二分的是基于直径长度dd的O(dlog2d)O(dlog_2 d)算法,一旦直径长点,然后数据范围大点,它就挂啦!诶我什么心态啊。算法:首先答案路径一定在某直径上[证明1,见文末],然后我们求出这个直径序列(任一直径即可[证明2,见文末]), 处理出一些数组: fif_i表示i是路径左端点时直径上

2015-03-25 20:57:01 2388

原创 【BZOJ2005】【Noi2010】能量采集 gcd

题解:一个点(a,b)(a,b)跟点(0,0)(0,0)中间隔的点的数量是gcd(a,b)gcd(a,b) 设fif_i为gcd(a,b)=igcd(a,b)=i的数对的对数。 那么ans=∑min(n,m)i=1fians=\sum_{i=1}^{min(n,m)} f_i然后有约数ii的数对的数量是⌊n/i⌋∗⌊m/i⌋\lfloor n/i\rfloor*\lfloor m/i\

2015-03-25 16:19:42 1266

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除