bzoj3143
    
                
摘要:之前我们曾经用dp解决过数学期望问题,这次我们用的是解方程的方法首先在编号之前,肯定要求出每条边的期望经过次数然后可以转化为求边端点的期望次数这种做法我一开始接触是noip2013的初赛问题求解,是类似的思想当出现循环无法用dp解决时,我们考虑列方程设pi为点i的期望经过次数则容易得到pi=sigm...
        
阅读全文
                    posted @ 
2014-12-31 23:06 
acphile
        
阅读(137) 
         
        推荐(0)     
                 
                
                
    bzoj1391
    
                
摘要:很像最大权闭合子图的题目s向每个工作连边,流量为收益每个工序,由工作i向对应机器连边,流量为租用费每个机器向t连边,流量为购买费显然跑最小割,ans=总收益-mincut 1 const inf=200000007; 2 type node=record 3 flow,next,...
        
阅读全文
                    posted @ 
2014-12-31 22:59 
acphile
        
阅读(121) 
         
        推荐(0)     
                 
                
                
    bzoj2729
    
                
摘要:一看就知道是数学题,考虑插空法由于老师只有两人,所以先对老师进行插空这里考虑两种情况:1.两个老师站在同一处,即两个男生之间站了两个老师这时候需要一个女生站在两个老师之间,再对女生插空,根据乘法原理即2*(n+1)*m*P(m-1,n+2);2.两个老师已经被男生隔开了这时候即P(2,n+1)*P(...
        
阅读全文
                    posted @ 
2014-12-31 22:54 
acphile
        
阅读(259) 
         
        推荐(0)     
                 
                
                
    bzoj2653
    
                
摘要:CLJ神牛的可持久化论文的题目,果然厉害其实第一步能想到后面就还是很简单的首先是二分答案,转化为判定性问题然后对于区间内的数,比他大的标为1,小的标为-1显然,如果存在一个左右端点符合的区间使得这个区间和大于等于0(因为这里中位数是向下取整)那么中位数一定是大于等于这个数的,这并不难理解下面我们就是...
        
阅读全文
                    posted @ 
2014-12-31 22:44 
acphile
        
阅读(186) 
         
        推荐(0)     
                 
                
                
    bzoj3261
    
                
摘要:xor有一个很重要的性质就是A xor B xor B=A所以这道题求[l,r]中p,使a[p] xor a[p+1] xor ... xor a[N] xor x 最大就是=最大化a[1] xor ……a[n] xor x xor a[1] xor a[2] xor ……a[p-1]令b[i]=a...
        
阅读全文
                    posted @ 
2014-12-31 22:03 
acphile
        
阅读(116) 
         
        推荐(0)     
                 
                
                
    bzoj2326
    
                
摘要:首先不难得出递推式f[i]=(f[i-1]*10^k+i) mod m;f[i]表示接到第i个数时的余数,k表示i的位数不难想到先按位数穷举位数,然后对于确定的位数,构造矩阵解决易得出:f[i] 10^k 1 1 f[i-1]i = 0 1 1 * i-11 0 0 1...
        
阅读全文
                    posted @ 
2014-12-31 21:41 
acphile
        
阅读(181) 
         
        推荐(0)     
                 
                
                
    bzoj1898
    
                
摘要:这是yhc大牛矩乘论文上的题目,那里面分析得很清楚了这里就说说我一开始错的地方,我一开始处理每个时刻能通过的邻接矩阵的时候把以不能访问的点i为起点和终点的都标记为0了,实际上只能标记以i为终点的边即可很好理解,是自己太脑残了 1 const mo=10000; 2 var b,c,g,f:arr...
        
阅读全文
                    posted @ 
2014-12-31 20:53 
acphile
        
阅读(138) 
         
        推荐(0)     
                 
                
                
    bzoj1297
    
                
摘要:首先学习是学习矩阵乘法在邻接矩阵的应用ab两点经过k条边的路径数就等于图的邻接矩阵G的k次幂之后G[a,b]的值但这道题问的是经过长度为k的路径数考虑到每条边的长度最长只有9,所以我们把一个点拆成9个点,i1~i9 顺次相连长度为1,i9为出点对于长度为k的边eij,连边i9-->j(10-k) 长...
        
阅读全文
                    posted @ 
2014-12-31 19:10 
acphile
        
阅读(142) 
         
        推荐(0)     
                 
                
                
    简单题
    
                
摘要:bzoj2718 不多说,dfs之后最大独立集bzoj3732 类似noip2013 d1t3bzoj2223 主席树同bzoj3504bzoj2875 裸的矩阵乘法,注意相乘会爆int64,所以乘法的时候用类似快速幂的方法做快速乘bzoj1756 裸的线段树,注意区间端点有点坑bzoj1520 裸...
        
阅读全文
                    posted @ 
2014-12-31 18:01 
acphile
        
阅读(111) 
         
        推荐(0)     
                 
                
                
    bzoj2131
    
                
摘要:首先不难想到对t排序,有f[i]=max(f[j])+v[i] tj=pj时,可得2ti-pi>=2tj-pj当pi=2tj+pj; 这样两个式子的两边完全只和当前状态有关系由于上面是等价变换,所以当同时满足2ti+pi>=2tj+pj和2ti-pi>=2tj-pj可得到tjb then exit(...
        
阅读全文
                    posted @ 
2014-12-25 21:26 
acphile
        
阅读(317) 
         
        推荐(0)     
                 
                
                
    bzoj1706
    
                
摘要:倍增好题,f[p,i,j]表示i到j经过了2^p条边走过的最短路径显然f[p+1]可以由f[p]转移来然后对n二进制拆分累加即可 1 const inf=9999999999; 2 3 var map,pm:array[0..110,0..110] of int64; 4 f,pf:arr...
        
阅读全文
                    posted @ 
2014-12-25 21:12 
acphile
        
阅读(209) 
         
        推荐(0)     
                 
                
                
    bzoj3531
    
                
摘要:不难想到树链剖分这题的难点是记录的是路径上宗教相同的点裸的想法是对每一种宗教都开一棵线段树,记录每个点的评级但显然这样会爆空间,仔细分析一下,这些线段树内很多点压根就没用到因此我们考虑对线段树动态开点,不难发现每次修改最多要开线段树上O(2*logn)个点,是可以接受的然后就是打码的问题了 1 t...
        
阅读全文
                    posted @ 
2014-12-25 21:11 
acphile
        
阅读(143) 
         
        推荐(0)     
                 
                
                
    bzoj3744
    
                
摘要:这道题是目前我做bzoj最感动的一题没有之一……首先先警示一下,分块的题目能不套主席树尽量不套因为主席树不仅回答来一个log而且常数也比较大,对于分块这种根号的算法非常不适合这里是求区间逆序对,考虑查询,不难想到答案是[l,r]所夹整块之间的逆序对数目和两边的数所带来的逆序对数目和首先第一部分是可以...
        
阅读全文
                    posted @ 
2014-12-25 21:01 
acphile
        
阅读(326) 
         
        推荐(0)     
                 
                
                
    bzoj2724
    
                
摘要:分块大法好!首先预处理第i块到第j块的答案,这是可以在O(n*tot)内处理出来的 tot表示块数然后考虑询问对于[l,r],答案只可能是[l,r]之间所夹整块[i,j]的答案和非整块中的位置上的数下面我们要做的是快速求出一个数在区间[l,r]出现的次数当然我一无脑就直接写了主席树,这当然可以复杂度...
        
阅读全文
                    posted @ 
2014-12-25 20:38 
acphile
        
阅读(182) 
         
        推荐(0)     
                 
                
                
    bzoj3343
    
                
摘要:分块大法好!考虑分块,首先对每块内进行排序;对于修改,对于整块的修改,显然只要打一个标记就可以了;不是整块就暴力修改,然后对那个块重新排序;这样查询的时候就可以做到在整块内二分,非整块暴力查找即可显然块取sqrt(n)合适,时间复杂度为O(nsqrt(n)*logn) 1 var a,b,c,be...
        
阅读全文
                    posted @ 
2014-12-25 19:47 
acphile
        
阅读(125) 
         
        推荐(0)     
                 
                
                
    bzoj1005
    
                
摘要:有了bzoj1430的经验解决这题就不是什么难事了首先考虑度数确定的点,令tot=sigma(d[i]-1)首先给这tot个数分配prufer编码的位置有C(tot,n-2)种方案每个方案中是可以进行可重复排列的,对应tot!/[(d[1]-1)!*(d[2]-1)!*…*(d[k]-1)!] 这里...
        
阅读全文
                    posted @ 
2014-12-25 19:29 
acphile
        
阅读(129) 
         
        推荐(0)     
                 
                
                
    bzoj1430
    
                
摘要:这道题只是给bzoj1005做一个铺垫这里介绍了一个叫prufer编码的东西,就是给定一棵带标号的无根树,找出编号最小的叶子节点,写下与它相邻的节点的编号,然后删掉这个叶子节点。反复执行这个操作直到只剩两个节点为止。这个编码有几个重要的性质1.每棵树都唯一对应一个prufer编码2.每一个prufe...
        
阅读全文
                    posted @ 
2014-12-25 19:19 
acphile
        
阅读(197) 
         
        推荐(0)     
                 
                
                
    bzoj2400
    
                
摘要:首先xor类的题目一定要逐位考虑,因为位位之间是不相互影响的逐位考虑每个点是0还是1,这就转化成了一个这样一个问题对于每个点可以选择属于S集合(这位是0)或T集合(这位是1)某些的点对(一条边的两端)属于不同集合会产生一个附加值1(边权)现在要是附加值最小(边权当前位为1的边最少),并且属于S集合的...
        
阅读全文
                    posted @ 
2014-12-25 13:30 
acphile
        
阅读(200) 
         
        推荐(0)     
                 
                
                
    bzoj3438
    
                
摘要:很容易想到是最小割模型首先对于一个点i,从s到i连一条容量为ai的边,再从i连一条容量为bi的边到t然后就是处理附加权的问题了一开始受到之前的思维定势的影响,一直在思考怎么在作物之间连边由于每种额外收益对应多种作物,而不再是原来bzoj2132的二元关系最小割,这是不行的所以我们考虑可以把一种组合作...
        
阅读全文
                    posted @ 
2014-12-25 13:26 
acphile
        
阅读(328) 
         
        推荐(0)     
                 
                
                
    bzoj3280
    
                
摘要:bzoj1221的变形版本,弄懂1221,这题还是很简单的 1 const inf=100000007; 2 type node=record 3 point,next,flow,cost:longint; 4 end; 5 6 var edge:array[0..50001...
        
阅读全文
                    posted @ 
2014-12-19 23:13 
acphile
        
阅读(136) 
         
        推荐(0)     
                 
                
                
    bzoj2502
    
                
摘要:学到很多知识的一道题目一开始读错题,后来发现是每条边必须至少访问一次明显是一个有下界的最小流首先是我自己脑补的比较渣的算法,可以无视:对于有下界的最小流,我不会做,但是我会做有下界的费用流,而且注意这是一个DAG图只要对每条边建x-->y (flow=1 cost=-inf)和x-->y (flow...
        
阅读全文
                    posted @ 
2014-12-19 23:11 
acphile
        
阅读(267) 
         
        推荐(0)     
                 
                
                
    bzoj2424
    
                
摘要:比较简单的费用流,一目了然 1 const inf=10000007; 2 type node=record 3 next,point,flow,cost:longint; 4 end; 5 6 var edge:array[0..200010] of node...
        
阅读全文
                    posted @ 
2014-12-19 22:22 
acphile
        
阅读(167) 
         
        推荐(0)     
                 
                
                
    bzoj2561
    
                
摘要:对于新加入的边,必须要既可能在最小生成树上也可能在最大生成树上我们先对于最小生成树考虑根据kruskal的理论,不难发现,u--v 长度为L的边可能出现在最小生成树上就是说删边剩下的比L小的边一定不能使u,v连通,因此问题就转化为求u,v两点的最小割了最大生成树同理,最后答案是两个加起来 1 co...
        
阅读全文
                    posted @ 
2014-12-19 22:21 
acphile
        
阅读(209) 
         
        推荐(0)     
                 
                
                
    bzoj3208
    
                
摘要:乍一看感觉好神,仔细一看数据范围……什么水题啊,直接暴力就可以了…… 1 var map,w:array[0..1000,0..1000] of longint; 2 v:array[0..1000,0..1000] of boolean; 3 i,j,k,a1,a2,b1,b2,ans,n...
        
阅读全文
                    posted @ 
2014-12-19 22:14 
acphile
        
阅读(135) 
         
        推荐(0)     
                 
                
                
    bzoj3295
    
                
摘要:没什么好说的,树套树应该随便搞我在128MB空间下大胆的写了主席树当然要把原树和修改树分开来建没有然后了 1 type node=record 2 l,r,s:longint; 3 end; 4 5 var tree:array[0..10000010] of n...
        
阅读全文
                    posted @ 
2014-12-14 18:30 
acphile
        
阅读(154) 
         
        推荐(0)     
                 
                
                
    bzoj1135
    
                
摘要:POI阴影又发作了但这道题挺好的,比较涨知识裸的想法是裸的每次二分图匹配,但显然会TLE这里就要引入Hall定理:二分图G中的两部分顶点组成的集合分别为X, Y, X={X1, X2, X3,X4,.........,Xm}, Y={y1, y2, y3, y4 ,.........,yn},图G中...
        
阅读全文
                    posted @ 
2014-12-14 18:29 
acphile
        
阅读(268) 
         
        推荐(0)     
                 
                
                
    bzoj2096
    
                
摘要:本来也不打算写这道题的解题报告的,因为比较水直接维护两个单调队列(最大值,最小值)随便弄弄就行了但是我开始疯狂不知道为什么的RE,然后实在没办法找root要了数据测了之后……王苍,根本就没有错啊……我就去向root反映,root测了一下以前AC的pascal程序……王苍……又都RE了,实在是感人肺腑...
        
阅读全文
                    posted @ 
2014-12-14 18:05 
acphile
        
阅读(205) 
         
        推荐(0)     
                 
                
                
    bzoj2789
    
                
摘要:这种题目肯定是先把一个当做标准串根据标准串得出一个初始串是怎么排列的,然后求逆序对数就可以了但是因为有重复,我们不知道标准串中的一个数到底是由原来哪个字母交换来的但是我们可以猜,不难贪心得到对于标准串中某一个字符,它第一次出现的位置是有原串第一次出现的位置交换来的,第二次是第二次,以此类推……虽然不...
        
阅读全文
                    posted @ 
2014-12-14 17:58 
acphile
        
阅读(185) 
         
        推荐(0)     
                 
                
                
    LA3353
    
                
摘要:感觉好久没做网络流这类的题目都不快会做了网络流建模之前首先要分析性质选择要求每个点恰属一个环就代表每个点在选择的图中,只有唯一入度和唯一出度那就简单了,对n个点拆点,对于原图的边i-->j,连边i-->j',费用为原边长度,流量为1然后s连i,i'连t,流量都是1然后跑最小费用最大流即可,存在这样的...
        
阅读全文
                    posted @ 
2014-12-12 20:25 
acphile
        
阅读(113) 
         
        推荐(0)     
                 
                
                
    poj2594
    
                
摘要:特殊的最小路径覆盖回顾一下经典的最小路径覆盖问题是每个点都恰好被一条路径覆盖我们把有向无环图的点拆成i,i',对于原图中边i--->j,连边i-->j'做最大匹配,答案是原图点数-最大匹配但这道题每个点可以被覆盖多次,所以我们考虑先dfs出每个点可以访问的点然后拆点,如果i可以到达j,那么连边i--...
        
阅读全文
                    posted @ 
2014-12-12 20:17 
acphile
        
阅读(207) 
         
        推荐(0)     
                 
                
                
    bzoj2427
    
                
摘要:一开始读错题导致各种不会做,无奈其实是一道水题,缩点反向建图树形dp即可 1 type link=^point; 2 point=record 3 po:longint; 4 next:link; 5 end; 6 7 var dfn,...
        
阅读全文
                    posted @ 
2014-12-11 21:42 
acphile
        
阅读(123) 
         
        推荐(0)     
                 
                
                
    bzoj1076
    
                
摘要:好像题目有点问题?且现在决定不吃的宝物以后也不能再吃好像下次还是可以吃的,就是这样然后明显是状压dp,注意这道题明显倒推更容易因为顺推很可能从一个无效状态推到有效状态 1 var f:array[0..101,0..32768] of double; 2 v,a:array[0..20] o...
        
阅读全文
                    posted @ 
2014-12-11 21:18 
acphile
        
阅读(223) 
         
        推荐(0)     
                 
                
                
    bzoj2818
    
                
摘要:我们先穷举素数p然后令y>x 这样问题就是求这个gcd(x,y)=p (1<=x<y=n)不难发现必须y=kp k∈N* 当y=p时,易知个数为φ(1)当y=2p 个数为φ(2),……当k最大为[n/p]时,个数为φ([n/p])这不就是求欧拉函数的前缀和因此我们要用筛法把φ(1~n)求出来弄一下前
        
阅读全文
                    posted @ 
2014-12-11 21:07 
acphile
        
阅读(148) 
         
        推荐(0)     
                 
                
                
    bzoj3668
    
                
摘要:noi水题,直接推出来每一位上取什么值才能取1直接搞就可以了 1 var a,b:array[0..40] of longint; 2 x,n,i,j,k,t,m,ans:longint; 3 fl:boolean; 4 s:string; 5 ch:char; 6 ...
        
阅读全文
                    posted @ 
2014-12-11 20:57 
acphile
        
阅读(175) 
         
        推荐(0)     
                 
                
                
    bzoj2006
    
                
摘要:论将区间和转化为前缀和的重要性这题一旦转化为前缀和就非常明了了一段区间[l,r]的美妙程度就等于s[r]-s[l-1]对于这种无法计算出所有方案而取前k大的题目,我们一般分类别然后利用类别内的单调性用堆维护对于以i开头的区间,显然最美的长度在[l,r]之间的区间和显然是max(s[i+l-1~i+r...
        
阅读全文
                    posted @ 
2014-12-11 20:51 
acphile
        
阅读(201) 
         
        推荐(0)     
                 
                
                
    bzoj3230
    
                
摘要:以前觉得这题好难,现在觉得这题还是挺简单首先看到类似LCP问题不难想到后缀数组吧前后的相似需要我们分别做一个后缀数组和“前缀数组”(就是把字符串反向然后跑后缀数组)这道题的难点就在于如何确定子串是什么考虑到一个有用的结论:任何一个子串都是某一个后缀的某一个前缀由于做完后缀数组之后,后缀已经按照从小到...
        
阅读全文
                    posted @ 
2014-12-11 13:39 
acphile
        
阅读(192) 
         
        推荐(0)     
                 
                
                
    bzoj1221
    
                
摘要:网络流与线性规划24题中的餐巾计划吧明显要拆点吧,把每一天拆成2个点,i,i+n起点 终点 容量 费用s i inf c 每天都可以购买新毛巾i t ni 0 每天的需求s i+n ni 0 每天可能被洗的餐巾i+n i+n+1 inf 0 ...
        
阅读全文
                    posted @ 
2014-12-11 13:31 
acphile
        
阅读(167) 
         
        推荐(0)     
                 
                
                
    bzoj3339 bzoj3585
    
                
摘要:两题本质是一样,只不过3585要离散化这种不修改,不强制的问题,显然先考虑离线算法这道题的思路和bzoj1878非常像考虑到如果只是求每个前缀的mex,我们是很容易扫一遍就得出来的我们设为这个位置的mex考虑从左往右依次删除当前数会对后面产生什么影响我们设删除数a[i],a[i]下一个相同数的位置为...
        
阅读全文
                    posted @ 
2014-12-08 13:14 
acphile
        
阅读(308) 
         
        推荐(0)     
                 
                
                
    bzoj2243
    
                
摘要:很明显是树链剖分吧然后很明显要用线段树维护吧,即维护一段区间首、尾颜色和区间内颜色总数然后修改lazy tag弄一弄,查询注意这一段尾和下一段首的颜色可能相同然后就没什么了 1 type node=record 2 po,next:longint; 3 end; 4 ...
        
阅读全文
                    posted @ 
2014-12-08 12:44 
acphile
        
阅读(181) 
         
        推荐(0)     
                 
                
                
    bzoj3123
    
                
摘要:首先肯定是主席树但这是一类“动态树”,似乎没有什么好的办法那就暴力呗,这里用到启发式合并,即两棵树合并,重建节点少的的那棵可以用并查集维护连通性查询主席树的建立还是和bzoj2588一样 1 const maxn=80010; 2 type node=record 3 po,ne...
        
阅读全文
                    posted @ 
2014-12-03 22:59 
acphile
        
阅读(174) 
         
        推荐(0)     
                 
                
                
    bzoj1146
    
                
摘要:这是一道无比繁琐的题目话说这道题使我第一次练dfs序,比较感动;首先dfs序就是在dfs过程中按照访问的顺序给每个点标上两个“时间戳”一个是第一次访问到点i时的时间戳c[i],一个是访问完以i为根时的时间戳cc[i]根据c[i],我们就可以将树变成序列,并且以i为根的子树,是序列上连续的一段当进行单...
        
阅读全文
                    posted @ 
2014-12-03 22:55 
acphile
        
阅读(145) 
         
        推荐(0)     
                 
                
                
    bzoj2588
    
                
摘要:一开始一看树上的操作,就无脑写了树链剖分+主席树然后果断T了,因为树链剖分+主席树必然带来两个log的复杂度而且树链剖分复杂度还比较大……后来发现其实没必要,在这道题,我们可以直接利用主席树维护只不过,每个点维护的是它到它的祖先上数值出现的个数则u,v之间各个数值出现的数值=tree[u]+tree...
        
阅读全文
                    posted @ 
2014-12-02 22:45 
acphile
        
阅读(158) 
         
        推荐(0)     
                 
                
                
    bzoj1036
    
                
摘要:树链剖分的基本题详细介绍在http://blog.sina.com.cn/s/blog_7a1746820100wp67.html通过树链剖分我们就可以在树上做线段树操作,完成解答 1 const inf=2147483647; 2 type node=record 3 po,n...
        
阅读全文
                    posted @ 
2014-12-02 21:56 
acphile
        
阅读(177) 
         
        推荐(0)     
                 
                
                
    bzoj1901
    
                
摘要:带修改的主席树怎么搞呢,由于主席树满足减法性质,且维护的是前缀信息,所以我们不难想到套一个树状数组来优化也很好理解,对于第i个位置,修改对后面的lowbit+都修改,求和lowbit-都求和由于修改要修改logn个树,每棵树都要开辟logS个节点,所以空间复杂度是两个log值得注意有修改还要将修改成...
        
阅读全文
                    posted @ 
2014-12-02 21:51 
acphile
        
阅读(189) 
         
        推荐(0)