随笔分类 - bzoj
摘要:**tips1:**下标相关均默认在[1,n]的环上 **tips2:**可能需要大量的感性理解(后面我也已经神智不清了) 设排名为x,将≤x的编号为0,>x的编号为1 记di为位置i上两人的编号和−[i>1],则每次从i移动到i−1的人编号为
阅读全文
摘要:对于S⊆T∣T⊆[1,A],定义fi,S表示左侧(对右侧前i个点)存在完美匹配的集合为S的概率 从fi−1,S转移到fi,S′时枚举i的出边O⊆[1,n],则$S'=S\cup {T\
阅读全文
摘要:记ai为时刻i当前cpu使用率,bi为ai的历史最大值 不难发现,问题即要支持:对ai区间赋值和区间加;查询ai和bi的区间最大值 在线段树的节点上维护max和一个操作序列(类似懒标记),序列中的元素为操作(赋值或加),并
阅读全文
摘要:整体思路类似于hdu5306,在线段树上维护区间内最大值及个数、严格次大值、最小值及个数、严格次小值和区间和,即可支持o(\log n)查询 修改时,区间加直接维护即可,区间取\min的做法与该题相同—— 修改时,搜索至完全覆盖的区间后再分类讨论: 1.若修改值大于严格次大值,可以打上懒标记
阅读全文
摘要:若原图不连通,显然答案都是"Disconnected",不妨假设原图连通 任求一棵生成树,对每条非树边随机一个权值,并将树边的权值为所有"包含"其的非树边("包含"指树边在非树边两端点生成树的路径上),那么每一条边即都有一个边权 下面,只需要判定删除的边权是否存在非空子集异或和为0即可(存在即不连通
阅读全文
摘要:题目连接 暴力dp时间复杂度为o(nm^{2}),是不行的 考虑当我们强制该连通块包含根,可以直接在dfs序上dp,即若该点选则考虑从f_{i+1}转移,否则从其子树所对应区间右端点+1来转移(即f_{dfn_{x}+sz_{x}}),利用单调队列优化可做到o(nm) 之后对其点分治
阅读全文
摘要:首先注意题目中的一些细节问题:1.同一个区间不能累加;2.每一种寿司才能提供x的代价;3.每一种代号的寿司才能贡献mx^{2}的代价 这些就很好的为最小割提供了条件,考虑最大权闭合子图的建图: 1.(S,id(i,j),d[i][j])(d[i][j]\ge 0),$(id(i,j),T
阅读全文
摘要:首先朴素dp的方程,即f[i][j]=max(f[i][j-1],f[i-1][j],(a[i]==b[j])*(f[i-1][j-1]+1)),这中间特殊的转移只在a[i]=b[j]时,而在这道题中与a[i]相等的b[j]只有5个,考虑利用这一性质先预处理每一种数的位置,在枚举i的同时,用线段
阅读全文
摘要:首先可以将期望转换为\sum_{i=0}^{inf}P(i),其中P(i)表示i轮后还没有结束的概率,通过对i轮后的结果容斥,可以得到P(i)=\sum_{j=0}^{2^{n}-2}(\sum_{k|j=j}p_{k})^{i}*(-1)^{n-|j|-1}对i累加后,发现即$\sum_{
阅读全文
摘要:如果将关系用一个数字来表示(相等表示不确定),那么题目相当于要计算1324-1243-1432=(1323-1423)-(1233-1234)-(1322-1423)=1323+1234-(1322+1233)=1323+1234-1222-(1324+1342)先预处理出li表示i
阅读全文
摘要:考虑用f[i][j]表示以i为起点(i是时间,所以要离散)选2^j条线段(这里不是时间)最小的终点,预处理用倍增的方式来求即可预处理出这个数组后,就可以很快的求出在[l,r]的时间内最多能选多少条线段,类似于树上的倍增(注意判断超过最大时间的情况)然后从前往后枚举每一段时间,考虑能否加入,当
阅读全文
摘要:考虑将三个矩形按某种方式划分为再三个大矩形中找最大值,容易发现只有6种划分方式,分为两类:1.4种,考虑第一条横/竖和第二条在第一条的两侧,这一类情况只需要预处理出左上/左下/右上/右下的最大子矩阵即可2.2种,两条横线/竖线划分,以横线为例,只需要处理处每一行的答案,然后,然后简单维护一下即可 1
阅读全文
摘要:考虑令bi=ai-a_{i-1},那么每一次操作相当于让bi-=x且b_{i+1}+=x,相当于从i向i+1移动x个石子,那么容易发现偶数堆没有用处,因为另一方可以用同样的操作,因此问题相当于从n往前的奇数堆的nim游戏,异或即可 1 #include<bits/stdc++.h> 2
阅读全文
摘要:设所有砝码质量离散去重后为b1,b2,……,bk,那么将每一个容器都表示为wi-C=\sum_{i=1}^{k}bi\cdot si(其中C<b1且对于1\le i<k,有bi\cdot si<b_{i+1}),把他看成一个进制,直接作减法即可 1 #include<bits/std
阅读全文
摘要:用f[i]表示前i个数,i必须被贡献的答案,考虑转移,枚举下一个被贡献的数j,那么j需要满足:1.j<i;2.a[j]<a[i];3.a[i]-(i-j+1)\le a[j],化简后即j-a[j]\le i-a[i];4.a[i]\le i这是一个三维偏序,但发现第二个限制和第三
阅读全文
摘要:转化题意,如果一个点k符合条件,当且仅当k能到达1和n考虑如果l和r(l<r)符合条件,容易证明那么[l,r]的所有点都将会符合条件,因此答案是一个区间枚举答案区间[l,r],考虑如何判定答案是否合法,也就是要求满足l能到达n且r能到达1,那么预处理出f1[i]表示i能到达1的最少边数,f2[i
阅读全文
摘要:先贪心,容易发现如果两个点中间没有点对,那么一定可以先把这两个点消掉分析一下,就可以发现这样两个点的答案就是这两个点对中间不成对的点数量扫描过去,线段树维护每一个点的权值(是否会被算入答案)即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #
阅读全文
摘要:首先C/2=x_{max}+y_{max}-x_{min}-y_{min}=max(x_{max},y_{max})-min(x_{min},y_{min})+min(x_{max},y_{max})-max(x_{min},y_{min}),容易发现前两项都是定值,那么就是要最小化后面的数字构
阅读全文