
各省省选
Mys_C_K
人生有许多道:曾经踏足的是道,即将踏往的也是道,那什么才是道呢?唯有脚下走的才是道。一切精神或者物质都归于虚无,然后从混沌中衍生出三万道。在悲喜间涉足一条无数前人经历过,且将有无数后人奔赴的道,无论是否已经或者将要到达彼岸,然后便不再回头或是左顾右盼,即使有些道繁盛至极,夜灯如昼,无数人一浪又一浪的涌去,造就了世人皆知的辉煌;即使有些道草木凋敝,荒草丛生,只等勇敢的开拓者斩开荆棘,创造一片天地;这些都无所关,无所在意,彼岸何如、来日何方甚至过往旧事都化作一缕云烟,飘渺碧霄,我自撷高山之月色,独随足落处往行。
展开
-
[HAOI2007]理想正方形-单调队列学习笔记
单调队列是一种限制条件比较多但是在某些问题上应用有意想不到的效果的数据结构。这种数据结构的核心思想也是减少不必要的比较。考虑luoguP1886 右转进入原题这个滑动窗口。以最大值为例,当一个窗口中的元素右边有一个比它更大的元素(也在窗口中),那么(当它右边的元素进入窗口中之后)无论何时这个元素都不能成为最大值。那我们就可以把它删除。入队实现起来就是这样的,如果队不空且要入队的元素比队原创 2017-01-18 13:58:38 · 686 阅读 · 0 评论 -
bzoj 2816 [ZJOI2012]网络 - LCT
持续屯板子……#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define N 200010using namespace std;int sz[N],fa[N],pf[N],ch[N][2],rev[N];inline int gw(...原创 2018-04-12 11:44:25 · 271 阅读 · 0 评论 -
[Hnoi2010] bzoj 2002 Bounce 弹飞绵羊 - LCT
继续屯板子#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define N 200010using namespace std;int sz[N],fa[N],pf[N],ch[N][2],rev[N];inline int gw(in...原创 2018-04-12 11:43:11 · 276 阅读 · 0 评论 -
[SDOI2008] bzoj 2049 Cave洞穴勘测 - LCT学习笔记
屯板子,LCT的话Menc讲的就不错#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define N 10010using namespace std;int rev[N],fa[N],pf[N],ch[N][2];inline int s...原创 2018-04-12 11:41:56 · 264 阅读 · 0 评论 -
[ZJOI 2016] bzoj 4455 小星星 - 容斥
最后要求一一对应,很难限制,相当于限制某些点没有被对应一个也不成立。但是其反面某些点不能被对应可以随便做,对这个容斥即可。可能需要稍微卡一下常数?#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define rep(i,a,b) for(int ...原创 2018-04-12 11:26:48 · 416 阅读 · 0 评论 -
[SDOI2016] 生成魔咒 - 后缀自动机
好像写过后缀自动机的题了 直接上板子把XD#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<map>#define lint long long#define N 100010using namespace ...原创 2018-04-12 11:18:42 · 201 阅读 · 0 评论 -
[SDOI2011] bzoj 2286 消耗战 - 虚树dp - 虚树学习笔记
网上写的都看不懂,自我感觉就是:把关键点排序,然后一开始根节是一条链,然后依次加入每一个点,每次用当前的路径,把求出新加入的点到根的路径,减去,也就是只保留那些从根到当前这个点的路径的点,可以想象是用新加入的路径切掉之前路径,这个题建完虚树随便做。#include<iostream>#include<cstring>#include<cstdio>...原创 2018-04-12 11:16:49 · 223 阅读 · 0 评论 -
[Shoi2016] bzoj 4596 黑暗前的幻想乡 - 容斥 - 矩阵树定理 - 学习笔记II
和小星星那个题一样,随便上一波容斥矩阵树即可。 矩阵树定理求的是边权乘积之和,所以可以做形如“恰好有k条黑边”的树计数(跑差值即可)等等。 代码:#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<utility>...原创 2018-04-17 19:45:58 · 249 阅读 · 0 评论 -
bzoj 4872 分手是祝愿 - 概率与期望 - 递推
首先考虑,给你一个局面最少操作多少次,显然要从大往小按,可以证明这样是最优的。把这些按下的位置标记出来,可以证明一定要恰好按这些位置,别的不能动。因此问题转化为,给你一个序列,有若干位置需要被访问奇数次,后接原题意。这样注意到位置是无关的,只需要知道有几个位置是“需要被按下的”即可。然后设dp[x]表示这件事情,状态转移方程如下: dp[x]=xn(dp[x−1]+1)+n−xn(dp[x+1]...原创 2018-04-17 19:02:43 · 217 阅读 · 0 评论 -
[ZJOI2007] bzoj 1095 Hide 捉迷藏 - 动态点分治 - 学习笔记
动态点分治.屯板子#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<map>#include<queue>#define N 100010#define M N<<1#define原创 2018-04-12 11:46:13 · 284 阅读 · 0 评论 -
[SDOI2018]bzoj 5333 荣誉称号 - dp
题解:首先考虑问题的弱化版本,即n=2^(k+1)-1,这时候一条链是从叶子到根的(并且是完全二叉树),若根到某节点x的权值之和是y,则其左右任何一个节点到其子树的任意一个点的权值之和都是(m-y)%m。因此可是预处理f[i][j]表示把i的权值改成j的代价,dp[i][j]表示从i出发走到叶子结点的权值是j的最小代价,那么对于叶子,dp[x][i]=f[x][i],否则dp[x][i]=min(...原创 2018-05-21 17:59:08 · 354 阅读 · 0 评论 -
[JLOI2015]bzoj 4005 骗我呢 - 组合数学 - dp
莫名其妙T了…… 考虑朴素dp,设dp[i,j]表示前i行j这个数字没出现,那么显然下一行只能是[j-1,m]的数字没出现,也就是dp[i,j]=∑min(j+1,m)k=0dp[i−1,k]dp[i,j]=∑k=0min(j+1,m)dp[i−1,k]dp[i,j]=\sum_{k=0}^{min(j+1,m)}dp[i-1,k],如果0&lt;j&lt;m0&lt;j&lt;m0dp[i,j...原创 2018-08-27 17:01:53 · 388 阅读 · 0 评论 -
[HNOI2015] BZOJ 4011 落忆枫音 - dp
考虑依然用随便选的答案减去含环的答案。 含环的答案就是\prod_{x不在环上}#{x的入度},也就是所以点的度数的乘积除以在环上的点答案,对环做dp即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>...原创 2018-08-23 12:42:19 · 192 阅读 · 0 评论 -
[JLOI2015] bzoj 4002 有意义的字符串 - 常系数线性递推
根据一些数学知识可以知道形如fn=pfn−1+qfn−2fn=pfn−1+qfn−2f_n=pf_{n-1}+qf_{n-2}的数列,设方程x2−px−q=0x2−px−q=0x^2-px-q=0存在两实数根为x1,x2x1,x2x_1,x_2,则fnfnf_n可以被表示为fn=Axn1+Bxn2fn=Ax1n+Bx2nf_n=Ax_1^n+Bx_2^n的形式,且通过f0,f1f0,f1f_0,f...原创 2018-08-27 12:58:14 · 205 阅读 · 0 评论 -
[Scoi2015] bzoj 4444 国旗计划 - 倍增
首先把环写两遍展开。 然后考虑必须选一个区间,只需要把这个区间作为最左边的区间开始选(因为如果左面还有区间等价于放到右面处理)。 用倍增维护这个过程即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<climits...原创 2018-08-22 15:30:55 · 231 阅读 · 0 评论 -
[YNOI2017]bzoj 4811 由乃的OJ - 树剖 - 线段树
树剖,线段树维护每一位经过这个区间从左到右和从右到左0和1分别变成了啥,三个log稳T。发现其实只需要维护00000…000和1111…111会变成啥即可,这样就两个log了。#include&lt;iostream&gt;#include&lt;cstring&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;#inc原创 2018-08-03 08:06:50 · 299 阅读 · 0 评论 -
[JLOI2015]bzoj 4007 战争调度 - dp
设dp[i][j][s]表示到i这个点子树里面选了j个黑点向上的状态是s的答案,注意到(i,s)的状态数之和其实只有2的n次这么多左右,所以直接做就可以了。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<map>...原创 2018-08-03 08:00:45 · 293 阅读 · 0 评论 -
[HEOI2014]bzoj 3612 平衡 - dp
题目大意:求: ∑ki=1xi=kn,∀i∈[1,k],xi∈[0,2n],xi−1<xi.k≤10,n≤1e4∑i=1kxi=kn,∀i∈[1,k],xi∈[0,2n],xi−1<xi.k≤10,n≤1e4\sum_{i=1}^k x_i=kn,\forall i\in[1,k],x_i\in[0,2n],x_{i-1}O(nk2)O(nk2)O(nk^2)了。 代码:#...原创 2018-06-01 19:03:26 · 246 阅读 · 0 评论 -
[SCOI2016] bzoj 4568 幸运数字 - 线性基 - 拟阵?
题目大意:多组询问点带权的树上链中选出一些点使得异或和最大。 题解:线性基具有拟阵性质,dfs预处理即可,询问暴力合并。 没了? 当然不是,首先把询问分成从LCA出发的两段,分别处理出来然后合并起来即可。 考虑类似保留区间的边问联通块个数那个题的维护方式,维护从每一个点向根的方向走的时候线性基以及每个数字的最早加入时间;但直接做是saygoodbye的,我们考虑维护从根开始dfs,然后每次...原创 2018-05-23 12:53:38 · 249 阅读 · 0 评论 -
[学习笔记]后缀数组 [JSOI2007] bzoj1031 字符加密
……其实后缀数组学很久了今天敲的时候发现好久不写都不会写了就翻blog发现没有写过……所以来用个模板题屯一波板子…… 这个题显然就是展开后缀数组即可。 代码:#include#include#include#define N 200010using namespace std;int wa[N],wb[N],cnt[N],v[N],x[N],y[N];char s[N];i原创 2018-01-30 22:44:24 · 290 阅读 · 0 评论 -
[JSOI2008] bzoj1013 球星空间产生器sphere - 高斯消元
用一点小学数学知识化简一下就是一个高斯消元。 代码:#include#include#include#define N 20#define gabs(x) (x>0?x:-x)using namespace std;double a[N][N],b[N],c[N];int main(){ int n;scanf("%d",&n); for(int i=1;原创 2018-01-30 22:19:46 · 237 阅读 · 0 评论 -
[HNOI 2015]BZOJ 4010菜肴制作-拓扑排序
传送门题目大意自行参考题解:首先一个基本的思路是从小到大查看i,然后把制作i需要提前制作的j按照字典序从小到大拓扑排序,然后这相当于是在反图上做字典序最大的拓扑排序。我就是这么做的,字典序拓扑排序可以用一个堆维护,就是有多个选择的时候选择字典序最值是最优的。看到好像其实就是反图的最大字典序拓扑排序?QwQ代码://BZOJ 4010//HNOI 2015#inc原创 2017-06-11 12:42:29 · 389 阅读 · 0 评论 -
[HNOI2008]BZOJ1008 越狱 - 组合计数
传送门题解:这个题明明非常傻逼啊我大概五分钟看题+想出来+提交+AC总数减去不合法数量即可。公式非常傻。#include#include#define mod 100003#define lint long long//ans=m^n-m*(m-1)^(n-1)using namespace std;lint fp(lint x,lint k){ if(k==原创 2017-06-20 09:54:00 · 376 阅读 · 0 评论 -
[ZJOI2009]BZOJ1433 假期的宿舍
传送门题解:SB二分图匹配,我会说我提交了五六次么QwQ注意清零和i和i+n(人和本人的床)连边。。#include#include#include#include#include#include#define MAXN 110#define MAXM 20000#define INF INT_MAX#define build_edge(u,v,c) add_原创 2017-05-21 16:38:16 · 438 阅读 · 0 评论 -
[AHOI2009] BZOJ2431 逆序对数列-动态规划-前缀和优化
传送门题目大意:求逆序对数为k的长为n的排列有多少?n,k题解:这显然是个DP(废话)而且dp[n][k]表示长为n逆序对数为k的方案数。而且状态转移显然要从dp[n-1][...]推过来。考虑如果把n插入到1~(n-1)的某个逆序对数为x的排列的第p个数的后面,那么会新产生(n-1)-(p+1)+1=n-p-1对新的逆序对,其中0因此如果当前状态dp[n][k],那么原创 2017-05-19 19:40:48 · 751 阅读 · 0 评论 -
[SDOI2016] BZOJ4602 齿轮-dfs-带权并查集-数论逆元-质因数分解
传送门题解:总结几种做法,并指出其中的优劣;主要是两种算法,一种是暴力dfs,另一种是并查集。事实上这种“每条边都考虑”大概都可以用上述两种办法处理,并查集复杂度略高,但是其实近乎线性。暴力dfs就是,建一张无向图(不能是有向的),然后对于每个联通块,第一个元素设为1,然后通过第一个元素,算出其它元素的值,然后对于点x,以及边(x,y),如果y也访问过了,就判断一下通过原创 2017-05-19 18:24:58 · 592 阅读 · 0 评论 -
[ZJOI2009]BZOJ1412 狼和羊的故事-最小割
传送门题目大意:自行参考题解:SB最小割任意两个相邻格子之间连边容量为1,a[i][j]=1的(i,j)和s相连,=2和t相连,这两个容量都是正无穷。跑最小割即可。//BZOJ 1412 //ZJOI 2009 #include#include#include#include#include#include#define MAXN 11000#define原创 2017-05-17 20:22:30 · 397 阅读 · 0 评论 -
[SDOI2010]BZOJ 1924所驼门王的宝藏-强连通分量-缩点-拓扑排序-dp
题目链接:右转进入题目题目大意:自行参考题目题解:tarjan缩点后拓排一下dp乱搞即可。代码://BZOJ 1924//SDOI 2010#include#include#include#include#include#include#include#define MAXN 100010#define MAXRC 1000010using namespace s原创 2017-04-25 16:59:18 · 536 阅读 · 0 评论 -
[SDOI2010] BZOJ 1922 大陆争霸-图论-最短路径-dijkstra算法
题目链接:右转进入题目题目大意:给定一张有向带权图,但是到达一个点之前必须访问另一些点。求从点1到点n的最短路径。题解:用一个“伪状态转移方程”来描述(之所以是说伪,是因为这是个图而不是个树,所以仅仅用来表示逻辑)dist[x]=max{d[from[x]],min{dist[pre[x]]+e[i].wgt}}。这个意思是:到达一个点的真正用时,是在到达它之前必须到达的点原创 2017-04-14 21:14:12 · 651 阅读 · 0 评论 -
[CQOI2010] BZOJ 1816 扑克牌
传送门题目大意:自行参考题解:神奇的二分答案p。然后你最多用x=min(p,m)张J。再扫一遍序列和p作比较看需要补y张J。可以证明如果y这样做就好了QwQ神题#include#include#include#define MAXN 100#define lint long longusing namespace std;int c[MAXN];int原创 2017-06-11 19:57:14 · 409 阅读 · 0 评论 -
[HAOI2005]BZOJ1055 玩具取名 - 动态规划
传送门题解:令f[i][j][k]表示i到j这段区间能否用k来演变出来。然后,没了#include#include#include#include#define MAXN 210#define MAXK 5using namespace std;bool f[MAXN][MAXN][MAXK],to[MAXK][MAXK][MAXK];char s[MAXN];int原创 2017-06-24 21:10:08 · 513 阅读 · 0 评论 -
[SCOI2005] BZOJ 1087 互不侵犯King - 状压dp
传送门题解:首先求出哪些行的状态是合法的,即没有相邻的棋子。发现合法的行状态数量只有90,没有2^9=512这么多。然后枚举相邻两行,预处理能否转移。然后记q[i]表示第i种合法的行方案是q[i],cnt[i]表示q[i]放了多少个棋子然后记dp[i][j][k]表示前i行第i行状态为j棋子个数是k的方案数转移枚举哪些状态可以转移(刚才预处理过的)然后……就没有然后原创 2017-08-26 19:41:32 · 369 阅读 · 0 评论 -
[HNOI2008] 水平可见直线 - 单调栈
传送门题解:沙茶题#include#include#include#include#define N 50010using namespace std;int s[N],ans[N];struct Line{ int k,b,id; Line operator=(const Line &L) { this->k=L.k;this->b=原创 2017-08-05 15:07:56 · 441 阅读 · 3 评论 -
[学习笔记][HEOI2013]BZOJ3165 Segment - 超哥线段树
传送门题解:超哥线段树先考虑直线L。首先,假设当前线段树上区间的直线是L2,如果L完全在L2的上面或者L2完全在L的上面那么把其中一个舍弃,递归结束。否则求一下两直线交点。为了方便起见,把左端点比较小的记作L1,另一条记作L2。求一下两条直线的交点。如果它小于等于mid,说明L1在右面的区间上完全覆盖了L2,因此当前区间保存L1,把L2下传到左区间。否则要把L1下放到右原创 2017-08-02 20:27:46 · 845 阅读 · 0 评论 -
[HNOI2008]BZOJ1009 GT考试 - 动态规划 - 矩阵乘法 - KMP
传送门题解:首先一开始并没有意识到这个题根KMP有9毛钱关系,只是以为如果设状态为:f[i][j]表示当前考虑到第i位,且有j位是B的前缀,那么如果下一位是B的j+1位那么就可以转移到f[i+1][j+1],否则转移到f[i+1][0]。后来发现我真是个智障。f[i][j]的j能转移到哪里,计算类似于KMP算法,我们枚举第j+1位是什么转移,转移到哪就在矩阵上+1。要特判一原创 2017-07-16 20:30:43 · 418 阅读 · 0 评论 -
[HEOI2005]BZOJ 4029定价 - 贪心
传送门题目大意:请自行参考。题解:真是一个复杂的贪心。网上貌似有大佬几行讨论完?不会只能一种一种情况讨论。显然要让前面的位尽量少,在此基础上最后一位尽量是5。特判L=1e9直接输出退出。1)如果Llen=Rlen:从最高位开始,首先LCP(最长公共前缀)是不能变的,没办法。然后把LCP在L和R中减去。然后这里特判一下L是0了,如果是那么全弄成0退出。于是我们现在原创 2017-07-15 17:26:39 · 388 阅读 · 0 评论 -
[SCOI 2009]BZOJ 1026 windy数 - 数位dp
传送门题目大意:自行参考。题解:设dp[i][j][2][2][2]表示考虑到第i位,数字是j,是否紧贴上界,历史上是否存在一个差小于2,以及这i位是否全部为0.为什么要记录最后一个“是否全部为0”呢?原因是如果前i位全部为0那么第i+1位无论是什么数都满足要求;否则如果第i位是0但是前i-1位不全为0那么意味着第i+1位只能是2及以上。注意到如果前i位都是0的话那么历原创 2017-06-15 08:18:34 · 511 阅读 · 0 评论 -
[CQOI2015]网络吞吐量 - 最短路 - 网络流
传送门题解:如题求出最短路网拆点跑网络流即可。#include#include#include#include#include#include#include#define INF (LLONG_MAX/3)#define MAXN 1010#define MAXM 200010#defin原创 2017-06-26 19:08:52 · 1048 阅读 · 0 评论 -
[ZJOI2006]BZOJ 1003 物流运输 - 最短路 - dp
传送门这个题想明白了还是还是非常的,就是注意到对T天分为若干段,每段的费用一定选择可行最短路。然后就是dp,没了。//ZJOI 2006//BZOJ 1003#include#include#include#include#include#include#define INF (LLONG_MAX/3)#define MAXN 30#define MAXT 11原创 2017-06-26 18:55:12 · 555 阅读 · 0 评论 -
[FJOI 2016]bzoj 4408 神秘数 - 线段树
题目大意:给你一列数,多次询问用一个区间的数字形成一个可重集合,最小的不能被表示为其一个子集的数字是多少。题解:考虑给你一个可重集合你怎么算:从小到大排序,假设用前x个数字不能表示的最小都数字是ans,那么如果a[x+1]>ans,则ans就是答案,否则ans+=a[++x]。这个过程显然可以线段树每次区区间最小值,加上,然后把这个最小值设为INF,但是复杂度是不对的,例如全是1。但是发现...原创 2018-10-04 11:32:02 · 217 阅读 · 0 评论