
BZOJ
Chester_King
虽千万人,吾往矣。
展开
-
【BZOJ】1096 [ZJOI2007]仓库建设 dp+斜率优化
接上一篇的入门难度,我们再来看看普通难度的斜率优化。依然是题目传送门。其实有关于斜率优化的所有题目的解题思路都是差不多的,换汤不换药罢了。由题意,我们可得一个朴素的dp方程:原创 2017-02-17 09:33:12 · 403 阅读 · 0 评论 -
【BZOJ】1433 [ZJOI2009]假期的宿舍 二分图的最大匹配
题目的意思非常明显,就是告诉你一些人之间的关系,一些床位可以容纳一些人。问在校且不回家的人数加上外来人数是否能被所有床位容纳。这题需要注意每次求二分图的最大匹配之前的初始化,我就是在这里WA了好几次……之后只要贴上匈牙利算法的模板就好了。其实这题也可以用网络最大流来做,但是我觉得好像并不需要如此装B吧……附上AC代码:#include #include using name原创 2017-02-28 19:50:54 · 686 阅读 · 0 评论 -
【BZOJ】 1001 [BeiJing2006]狼抓兔子 网络最大流
题目传送门:BZOJ1001%%%LYF大神,打的是SPFA,如果不用vector和queue,肯定比我跑的快……说实话,如果这题的数据造的强大一些,我的dinic应该是要被卡掉的。这题我打的是网络最大流,也是我看了题目后想到的第一种解法。主要是建图,要好好想想,怎样把二维的图转换成一维的n*m个点。附上AC代码:#include #include using na原创 2017-03-15 18:42:48 · 342 阅读 · 0 评论 -
【BZOJ】1051 [HAOI2006]受欢迎的牛 强联通分量
其实本不想发这题的题解的,但是为了提醒自己不再犯错,还是发一波吧。 这题依旧是比较水的强联通分量,只要求所有出度为0的强联通分量的节点数总和就行了。 按理来说,我应该是比较轻松的就会过掉的…… 但是! 因为自己的粗心,忘了考虑有多个强联通分量出度为0…… 于是,WA了好几次…… 好吧,无论做什么题目,不管有多么简单,都应该认真对待,狮子搏兔亦用全力!附上AC代码:#include <cs原创 2017-04-10 21:12:11 · 410 阅读 · 0 评论 -
【BZOJ】1798 [Ahoi2009]Seq 维护序列seq 线段树
题目传送门 这题的正解是线段树,这个其实还是比较好想的,因为这道题中的所有操作都是线段树的基本操作。 但是,这题的延迟标记有两个,这两个标记之间的关系是比较难想的,而且也是比较容易打错的…… 这道题主要考察的是选手对于线段树的延迟标记的理解程度,整个程序最难打的也就是pushdown这个函数,我也在这个函数上WA了好几次。(这仅代表个人意见,如有同学认为这个函数好打,那你厉害了)附上AC代码:原创 2017-04-11 19:59:58 · 335 阅读 · 0 评论 -
【BZOJ】4563 [Haoi2016]放棋子 递推+高精
题目传送门这题是我在洛谷上搜索“二分图”搜出来的题目……这题的正解是错排公式+高精度。说实话,错排问题和二分图好像还是有一点点的关系的……首先,这题中的n个障碍显然没有什么卵用,把所有的障碍都放到n*n的矩形的对角线上显然对原问题的求解没有什么影响。然后,设f[i]为i*i的矩形的错排方案数,我们提取1~i行和1~i列,建立一个二分图,显然对于每一行有i-1中连接方案。这样原创 2017-04-13 20:44:10 · 421 阅读 · 0 评论 -
【BZOJ】2456 mode 模拟
题目传送门其实这是一道考思想的题目,不能说是模拟吧。一开始我还不知道怎么做,想了好多,看了题解后才恍然大悟。(恍然大悟你妹啊,原来题目保证有解的啊,我说这个题解怎么是对的)记录一下当前出现过的最多的数字pre和出现的次数sum,然后读入下一个数x,首先判断sum是否为0,若sum==0,则sum=1,pre=x,跳过循环。然后若x==pre,则++sum,否则--sum。附上A原创 2017-04-14 16:11:21 · 418 阅读 · 0 评论 -
【BZOJ】1085 [SCOI2005]骑士精神 IDA*
题目传送门好吧,对于一个初学者,我连自己打的是A*还是IDA*都不知道……这题如果用BFS来做肯定是要TLE的,那么我们就能想到用BFS的进化版——A*来做。可以说BFS是一种特殊的A*:因为用A*的思想来考虑BFS,就会发现BFS的估价函数永远等于0。A*比BFS就多了一个估价函数,但是A*却比BFS更快、更强!设估价函数f(n)=g(n)+h(n),g(n)为当前搜索层数,原创 2017-04-15 10:21:00 · 641 阅读 · 0 评论 -
【BZOJ】1303 [CQOI2009]中位数图 建模
题目传送门这题最主要的思想就是建模,对于每一个数a[i],建立一个c数组:若a[i]若a[i]=b,则c[i]=0,用一个变量wz记录当前的i。若a[i]>b,则c[i]=1。这样我们就把题目转化成了求c数组里有多少子序列的和为0。之后我们再对c数组做一遍前缀和,原创 2017-04-17 13:30:25 · 435 阅读 · 0 评论 -
【BZOJ】1029 [JSOI2007]建筑抢修 贪心+堆
题目传送门今天的时间好少啊,晚自修还要去听专题报告,都没有时间刷题了,只有打一道水题练练手了。这题的解题思路是贪心,对每个节点的T2进行排序,然后从小到大修最多的建筑就行了。但是这个贪心的思路是有问题的:如果T2最小的节点i的T1很大,但是在i的T2范围内有许多节点的T1很小,不就GG了?所以我们可以用一个堆来维护当前维修的所有建筑的T1,然后枚举下一个节点,若这个节点可以直接维修原创 2017-04-18 15:57:26 · 557 阅读 · 2 评论 -
【BZOJ】1293 [SCOI2009]生日礼物 (这题有多种解法)
题目传送门这题的解法主要分为三种,接下来我会详细讲解。一、首先,我们来看最慢的一种方法,但也是代码量最少的一种——堆。我们用一个小根堆H来存所有的节点的x坐标,然后对每一种彩珠开一个小根堆,每次从H中取最小的一个坐标,然后枚举每一种颜色,若这种颜色的堆顶坐标小于H的堆顶坐标,就把这个堆顶弹掉,然后判断下一个堆顶,直到:1.当前堆顶坐标不小于H的堆顶坐标;2.当前的堆为空。对于第一种原创 2017-04-19 20:25:04 · 538 阅读 · 1 评论 -
【BZOJ】1179 [Apio2009]Atm 强连通分量+最短路
题目传送门这题的正解——强连通分量+最短路,还是需要一定的想象力的。首先,我们把所有能够互相到达的点(也就是强连通分量)进行缩点,缩完后的点的权值就是原先所有点的权值和。然后,我们对缩完点的图重新建图,和强连通分量相连的点就是和属于这个强连通分量的原先节点相连的点。最后,我们对新建的图做一遍最短路,然后每次读入一个节点,判断该节点所在的强连通分量到起点s的最短路是否大于当前的ans原创 2017-04-20 20:11:32 · 585 阅读 · 0 评论 -
【BZOJ】3211 花神游历各国 【CODE[VS]】2492 上帝造题的七分钟2 线段树
题目传送门又是一次帕金森,多打等号WA6次——真的伤心啊。这题的正解是线段树,应该还是比较好想的。对于修改操作,对于给定的区间中的每一个节点做单点修改,将该节点的值变为sqrt(该节点的值),之后就是线段树的维护了。这题真的比较水,线段树连延迟标记都没有用到。附上AC代码:#include #include #include #define lt (k<<1)#de原创 2017-04-21 21:28:33 · 308 阅读 · 0 评论 -
【BZOJ】1922 [Sdoi2010]大陆争霸 带限制最短路
题目传送门这题一开始还真的没有什么思路,虽然说题目意思是求最短路,但是那个结界真的讨厌啊……然后点开了hzwer学长的博客……好吧,我承认我看题解了……发现这题的正解是带限制的最短路。用d1数组记录到达当前节点需要的时间,d2数组记录拆掉这个节点的所有结界发生器需要的最短时间,因此到这个节点的最短时间就是min(d1,d2)。然后就是最短路径的模板了……附上AC代码:#in原创 2017-04-24 19:19:31 · 413 阅读 · 0 评论 -
【BZOJ】2152 聪聪可可 点分治
题目传送门这道题的正解——点分治还是挺好想到的,因为题目已经明确给出这道题是以树为基础的。这题的统计答案与点分治的模板有些不同,不过也还是挺好想到的。题目要求任意两点的距离是3的倍数的点对数量,我们可以把这个转化为在有根树中,LCA到其中一点的距离为3的倍数余1,到另一节点的距离为3的倍数余2的点对数量加上LCA到两个节点的距离都为3的倍数的点对数量之和。就此,我们已经解决了这道题原创 2017-05-30 20:11:42 · 489 阅读 · 0 评论 -
【BZOJ】1468 Tree 点分治
题目传送门这题就是一道点分治的模板题,就当是立学习了点分治的Flag了。点分治,就是把分治的思想转移到树上,然后对于任意两个节点的路径过当前子树的情况进行特殊讨论。这道题是求任意两点间的距离不大于k的点对数量。为了保证时间复杂度的稳定性,我们可以求一遍当前子树的重心来做根。然后,我们可以统计所有过当前树根且路径长度不大于k的点对数量p,我们也可以统计所有过当前树根且路径长度不大原创 2017-05-25 20:53:02 · 559 阅读 · 0 评论 -
【BZOJ】4034 [HAOI2015]树上操作 树链剖分
题目传送门这题的题目意思很明确,就是树链剖分。但是,这题需要用到long long,在打lazy标记时需要强转,把int转成long long,我也在这里错了不下15次。博主花了2天来改这道题,并和许多大佬的标程对比,并没有发现任何错误。偶然中改了这个地方,发现程序AC后,当即掀桌子……博主对此表示很难受……附上AC代码:#include #include #inclu原创 2017-05-14 16:58:14 · 295 阅读 · 0 评论 -
【BZOJ】1455 罗马游戏 左偏树
题目传送门这题和洛谷上的左偏树模板的解题思路是一模一样的,所以只要贴上左偏树的模板就好了。附上AC代码:#include #include #include #define N 1000010using namespace std;int n,m,dis[N],w[N],x,y,f[N],ls[N],rs[N];void read(int& a){ static ch原创 2017-05-04 18:10:56 · 384 阅读 · 0 评论 -
【BZOJ】1026 [SCOI2009]windy数 数位dp
题目传送门感觉自己真的是越来越菜了,连数位dp都写不来了……定义f[i][j]表示当前取到第i位(从高位到低位),当前位置为j的方案数。然后就是对于是否存在前导0的分类讨论,并同时统计答案。最后利用差分的思想,把[l,r]的windy数的数量转化成[1,r]的windy数的数量减去[1,l-1]的windy数的数量即可。附上AC代码:#include #include原创 2017-05-31 19:22:42 · 232 阅读 · 0 评论 -
【BZOJ】3314 [Usaco2013 Nov]Crowded Cows (多种解法)
题目传送门多刷水题有益身心健康……维护一个堆(单调队列和线段树也可以吧),记录在当前节点前且在距离范围内的以高度为关键字的大根堆。若当前堆顶的位置超出范围,就把这个节点pop掉。若当前堆顶的高度满足条件,就把计数的数组加1。最后统计有多少节点的计数数组的值为2,个数就是答案。附上AC代码:#include #include #include #include u原创 2017-06-08 21:08:57 · 516 阅读 · 0 评论 -
【BZOJ】1787 [Ahoi2008]Meet 紧急集合 LCA
题目传送门这题还是挺好的,至少我困扰了我一段时间。首先把这棵无根树转化成一棵有根树,根是什么,树的重心吧。(如果数据过小,直接定义第1号节点为根就行了)然后倍增所有节点,得到所有节点和祖先的关系。最后,要求3个点的树上最短距离,那么集合点一定是其中两个节点的LCA。(画画图就秒懂了)最暴力的方法就是枚举3个节点的LCA,然后判断距离和最小的为集合点。但是,有一种神奇的方法:原创 2017-06-08 20:11:07 · 321 阅读 · 0 评论 -
【BZOJ】2738 矩阵乘法 整体二分+树状数组
题目传送门伏地膜LYF大佬,连整体二分都会,不愧是一代神犇。向大佬低头,这位大佬讲的很详细,并且很好懂。整体二分,是一种离线的算法,就是对所有状态和询问一起二分。递归,每次对所有状态进行统计,然后根据当前所有状态的一半将当前所有询问进行划分。当所有状态只剩下一种时,就可计算当前所有询问的答案。当然,现在我还是初学整体二分,需要做更多的题目来熟练这种算法。附上AC代码原创 2017-05-24 19:01:29 · 419 阅读 · 2 评论 -
【BZOJ】4774 修路 斯坦纳树
题目传送门感谢JYZ大佬,教会我了这道题的思想。这题就是一道典型的斯坦纳树问题,求目标联通状态的最小权值和。在斯坦纳树中,我们用到了状态压缩的思想,用一个二进制状态来表示当前的图中目标点是否在当前联通状态中。我们定义f[i][opt]为当前在第i号节点,连通状态为opt的最小权值和。我们可以分两种情况讨论:1.我们定义sub为当前opt的子集,则f[i][opt]=原创 2017-06-05 19:50:00 · 715 阅读 · 0 评论 -
【BZOJ】3036 绿豆蛙的归宿 期望DP
题目传送门补一发期望DP,这道题困扰了我很久了,今天终于A掉了,比较开心:)f[i]=∑j∈son[i]f[j]+dis(i,j)deg[i]上面就是整道题的核心,只要从第一个节点开始DFS就行了。附上AC代码:#include #include #define N 100010using namespace std;struct side{ int to,w,原创 2017-06-02 21:09:35 · 270 阅读 · 0 评论 -
【BZOJ】1628 [Usaco2007 Demo]City skyline 单调栈
题目传送门诶,这不就是QZOI2017的t2吗?身为蒟蒻的我也就这题是AC的了,其他的题目……难受ing……就是一个单调栈,统计当前的节点之前有多少节点的纵坐标比当前节点的纵坐标大。附上AC代码:#include #include using namespace std;int n,m,que[1000010],len,x,y,ans;inline char nc(){原创 2017-06-02 19:04:52 · 352 阅读 · 0 评论 -
【BZOJ】2599 [IOI2011]Race 点分治
题目传送门这题是一道有点难的点分治,但是我的想法和标算好像有些出入诶……考虑点分治的一般套路,都是先求树的重心,然后计算当前子树中所有非树根节点到树根节点的距离,最后根据题目要求统计答案。这题嘛,还是一样的套路,对于当前子树,记录 所有已经搜索过的非树根节点 到树根的距离 所需的最小深度。(这句话要好好理解)然后在统计答案时,就用当前节点的深度加上k减去当前节点到树根的距离所需的最原创 2017-05-31 20:42:58 · 272 阅读 · 0 评论 -
【BZOJ】 1610 [Usaco2008 Feb]Line连线游戏 计算几何
题目传送门日常水一题,因为n的范围只有200,所以可以暴力枚举两个点,把它们所形成的直线记录下来,去重,直线的条数就是答案。附上AC代码:#include #include #include #include using namespace std;struct note{ int x,y;}a[210];int n,len,ans;vector c;int原创 2017-07-01 14:31:17 · 292 阅读 · 0 评论 -
【BZOJ】1050 [HAOI2006]旅行comf 并查集
题目传送门学过的东西就应该及时巩固,否则和没学没有什么区别——我TMD把自己半年前做过的题目都忘了……刚一拿到这道题,我YY了很久,最短路?BFS?还是树结构?YY不出来,题解搜起来。然后我就搜到了codevs1001,舒适的路线,然后发现这题我TMD是做过的?!看了自己半年前的代码,发现是并查集……懵逼中……好吧,因为m的范围是5000,n^2能勉强接受,于是可以对所有边按权原创 2017-07-01 15:29:46 · 358 阅读 · 0 评论 -
【BZOJ】1016 [JSOI2008]最小生成树计数 最小生成树+DFS
题目传送门我看这道题不爽很久了,但是因为博主过于蒟蒻,一直都没能有什么特别的想法,就一直留到了现在。首先根据题意,我们应该对这张无向图做一遍最小生成树,判断这张图是否能生成一棵最小生成树,而不是一片森林。这题选用的最小生成树算法是Kruskal,在做Kruskal的同时我们应该把所有边权相同的边归为一类,并统计在最小生成树中该种边权需要几条,为之后的DFS和乘法原理做准备。之后就是原创 2017-07-02 08:37:13 · 399 阅读 · 0 评论 -
【BZOJ】1211 [HNOI2004]树的计数 prufer编码+组合数学+高精度
题目传送门今天是一个%大佬的好日子,感觉大佬遍地走,只有我最弱……这题是一道非常难的题目,虽然是“【BZOJ】1005 [HNOI2008] 明明的烦恼”的简化版,但是仍然是一道非常难的数学题。(至少我是这么认为的)首先,在做这题之前,我们需要了解prufer编码。大漩涡传送门,个人认为百度百科已经讲的很清楚了,就不在这里再做赘述了。然后我们就要考虑如何把prufer编码转化成组合原创 2017-07-02 22:09:45 · 349 阅读 · 0 评论 -
【BZOJ】1003 [ZJOI2006]物流运输 最短路径+DP
题目传送门复习一下之前所学,回忆一下一年前还身为普及组的菜鸡,被省选题干趴下的故事。去他妈的张又又!这道题的解题思路是非常神奇的,需要一定的脑洞。定义g[i][j]表示从第i天到第j天都不换路线的最小代价,显然我们可以用最短路径算法处理出g数组。然后就是DP了。定义f[i]表示从第1天到第i天的最小代价,显然这可以用O(n^2)的DP来做,状态转移方程也非常好想,f[i]=min(f[原创 2017-07-03 08:49:38 · 397 阅读 · 0 评论 -
【BZOJ】1045 [HAOI2008] 糖果传递 && 3293 [Cqoi2011]分金币 贪心
这题是有爱的双倍经验时间,一个程序刷两题真好。(偷笑)但是,手贱交错题目就不好了……(今天怎么这么背?)这题其实就是一个结论题,引用一下一位大佬的部分博客:(大佬传送门)原创 2017-07-03 09:36:18 · 312 阅读 · 0 评论 -
【BZOJ】1112 [POI2008]砖块Klo 平衡树
题目传送门今天一晚上就做了一道题,好颓废啊……这题其实还挺水的,只不过本蒟蒻一直都不太想的进去,所以一直WA,一直懵逼。其实这题的题意是在n个数中连续取k个,把这k个数都改成一个相同的数m,使得Σabs(a[i]-m)最小。很显然,当m为当前k个数的中位数时,当前k个数的改动最小。至于为什么,我也不知道……然后我们就可以把这题转化为一个滑动窗口的题目,总共有n-k+1个窗口,求原创 2017-07-04 21:27:39 · 336 阅读 · 4 评论 -
【BZOJ】2431 [HAOI2009]逆序对数列 递推
题目传送门不知道今天是怎么了,可能是空调吹多了吧,一直不在状态,连递推题我都做不来了……(扎Zn了老Fe……)然而,不管环境如何恶劣,我们仍要努力学习,为了自己的明天而奋斗。(说的好像跟真的一样)其实这题就是一个递推,现在我们考虑第i个数,定义f[i][j]表示序列里有i个数,逆序对的组数为j的方案数。因为第i个数的权值就是i,则不管第i个数插到序列里的哪个位置,都会和在它后面的数原创 2017-07-03 15:05:28 · 440 阅读 · 0 评论 -
【BZOJ】3687 简单题 DP+bitset
题目传送门前几天的考试考到了bitset,于是我就去学了一发。大佬传送门,这位大佬已经讲的很清楚了,我就不再赘述bitset的功能和用法了。其实说白了,bitset就是一个可以位运算的bool数组罢了。回到这题,我们可以很容易想到的是DP,定义f[i[表示当前子集的算术和为i的子集构成方案数。状态转移方程也非常好想,f[j]+=f[j-a[i]]然后就是统计答案,若f[i]原创 2017-07-06 22:38:11 · 330 阅读 · 2 评论 -
【BZOJ】1131 [POI2008]Sta 递推
题目传送门这题还是挺水的,还是YF哥哥最强了。(听说最近YF哥哥在一次模拟赛中虐场了,不愧是一代神犇)其实我觉得YF哥哥有一点说错了,这题好像并不属于DP的范围,只是一个递推罢了。(YF哥哥不喜勿喷)首先我们可以随便选一个节点作为树根,预处理出所有节点到第i号节点的距离和以当前节点为根的子树的大小。然后我们取节点i和j,假设以第i号节点为根,j是i的一个儿子,现在我们要考虑以j号节原创 2017-07-11 10:22:37 · 325 阅读 · 2 评论 -
【BZOJ】1040 [ZJOI2008]骑士 树形DP
题目传送门好难啊,我太菜了,连题解都看不懂啊……orz教主JN,把一道如此难题讲得如此精简,JN是最强的!(这是JN邪教的信条!)翻开题解,都是一群大佬在刷什么基环外向树,吓得我抱起了抱着抱着抱着我的我的我的我。(这TMD什么玩意儿?!)这道题给出的是一张n个节点、n条边的有向图。但只要稍微脑补一下,其实是无向图。题目并没有说整张图是联通的,所以这是一片基环外向树森林。对于普通原创 2017-07-11 10:42:21 · 293 阅读 · 0 评论 -
【CODE[VS]】1082 线段树练习 3 树状数组
题目传送门标题只是吸引你点进来的,这并不是一篇水博客,下面是有好东西的。曾经我们以为树状数组虽然常数比较小,代码简洁明了,非常好掌握,但可惜的是没有办法实现区间查询而放弃了树状数组去学线段树。我们并不能否认线段树的优秀,但是我们也不能否认树状数组的强大——树状数组是可以实现区间查询的!首先我们都了解树状数组的区间修改吧,其实就是利用了前缀和的性质罢了。(也就是差分)然后我们原创 2017-07-11 11:11:34 · 244 阅读 · 0 评论 -
【BZOJ】3343 教主的魔法 分块
题目传送门分块什么的最好了~(至少简单易懂,代码还比较好写)这题就当是我学习了分块的flag吧。其实分块就是把原来n个元素分成sqrt(n)块,每块有sqrt(n)个元素。对于一段连续的区间修改,我们可以把这个区间分成若干个完整的块和两端剩下的元素。对于完整的块,我们可以用和线段树一样的思想——延迟标记来记录当前块内所有元素的共同修改量;对于两端剩下的元素,我们可以暴力修改原创 2017-07-21 20:27:58 · 267 阅读 · 0 评论 -
【BZOJ】3670 [Noi2014]动物园 KMP
题目传送门这题的正解就写在了题目里——KMP。(NOI的题目有这么好心吗?)对于每个字符串,我们先求出next数组,也就是失配函数,并记录当前状态经过几次pre=next[pre]会使pre==0,也就是num数组的雏形。然后再做一遍类似于求next数组的循环,并while(pre*2>i) pre=next[pre],然后就是统计答案咯。由于今天不知中了什么毒,可能是天气太热,我原创 2017-04-18 20:19:45 · 562 阅读 · 0 评论