bzoj
Lifel
dcoi 蒟蒻一枚 欢迎交流~~~qq:1627767186
展开
-
bzoj1087 [SCOI2005]互不侵犯King
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int原创 2017-09-12 22:32:37 · 420 阅读 · 1 评论 -
bzoj3531[Sdoi2014]旅行(树剖)
对每一种宗教建立线段树,然后和普通树剖就没什么区别了 PS:为什么第二份会T啊#include<iostream>#include<cstdio>#include<cstring>#define M 6000005#define inf (1<<30)using namespace std;inline int read(){ int x=0,f=1;char ch=getc原创 2017-09-07 17:18:42 · 281 阅读 · 0 评论 -
bzoj2836魔法树 树剖
题目大意: 初始点权为0 支持路径修改+子树求和 用树剖水过去 路径修改:区间修改即可 子树求和:区间求和(pos[x],pos[x]+size[x]-1) PS:据说dfs也可以做#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,原创 2017-09-08 09:18:17 · 401 阅读 · 0 评论 -
bzoj2243[SDOI2011]染色 (树剖)
用线段树维护每段信息, 需要记录每段区间两端的颜色和段数,然后根据情况合并#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>原创 2017-09-08 11:24:01 · 386 阅读 · 0 评论 -
bzoj1036: [ZJOI2008]树的统计Count(树剖模版)
树剖入门题,有时间再写lct#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace原创 2017-09-07 10:18:59 · 261 阅读 · 0 评论 -
bzoj1452: [JSOI2009]Count(二维树状数组)
二维树状数组裸题,开一百个树状数组维护每一个颜色个数即可#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)u原创 2017-09-13 22:21:29 · 534 阅读 · 1 评论 -
bzoj3631: [JLOI2014]松鼠的新家 树链剖分||树形dp
题目大意: 每次对一条链进行区间修改,最后询问每个点的点权树剖裸题,似乎dfs序也可以做?有时间再补#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) f原创 2017-09-13 21:24:57 · 525 阅读 · 0 评论 -
【bzoj1827】[Usaco2010 Mar]gather 奶牛大集会 树形dp+贪心
由x转移到y的答案为ans=ans+val∗(s[1]−s[y]∗2)ans=ans+val*(s[1]-s[y]*2) 可以看出只有s[1]−s[y]∗2<0s[1]-s[y]*2<0答案才会减小,所以贪心即可#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#inc原创 2017-09-13 20:13:22 · 483 阅读 · 0 评论 -
bzoj1977: [BeiJing2010组队]次小生成树 Tree 树上倍增
求严格次小生成树 用倍增记录最小值和次小值+求lca,枚举每一条非树边,然后转移更新PS:dfs时注意最小值和次小值的转移#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define f原创 2017-09-06 10:55:18 · 247 阅读 · 0 评论 -
bzoj1113[Poi2008]海报PLA 单调栈
很闲,做一道水题 维护一个单调递增的栈,每次与之前有相等的就可以减少一次#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=原创 2017-09-08 21:49:23 · 338 阅读 · 0 评论 -
bzoj1131 树形dp
闲着无聊做水题2#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;c原创 2017-09-08 22:04:40 · 366 阅读 · 0 评论 -
poj1741点分治
点分治一般按点分为两种情况: 1:过该点,则遍历统计答案 2:不过,递归到子树重心统计 然后合并答案#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b)原创 2017-09-10 19:40:18 · 310 阅读 · 0 评论 -
bzoj1072[SCOI2007]排列perm
题目大意: 给定n个数字,求这些数字组成的不重复的全排列中有多少整除d 暴力:用next_permutation+set判重暴力判断(据说是可以过的)大常数选手又T掉了#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<set>#define fo(原创 2017-09-12 20:53:26 · 315 阅读 · 0 评论 -
bzoj4893项链分赃
结论:答案小于等于颜色数 暴力判断1,前缀和 2,用一个队列维护,使所有颜色数等于一半 拓扑学证明B站有视频#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<queue>#define fo(i,a,b) for(int i=a;i<=b;i++原创 2017-09-12 18:27:05 · 392 阅读 · 0 评论 -
vijos 1083 小白的公园 线段树
题目大意:线段树维护区间最大连续和 思路:每一个区间的连续最大和可以分为三部分:左,右和跨越中间的连续一部分.前两个很好处理,对于第三个,它等于左区间的最右端的和+右区间的左端的和#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) fo原创 2017-08-27 21:07:39 · 313 阅读 · 0 评论 -
bzoj1529: [POI2005]ska Piggy banks(tarjan||并查集)
题目大意:求联通块的数量 显然可以想到tarjan缩点之后统计出度为0的点的数量 但这题会MLE#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) fo原创 2017-09-11 20:02:11 · 390 阅读 · 0 评论 -
bzoj1051(缩点)
tarjan缩点后,若有出度为0的,输出其强联通块的大小,否则无解#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i-原创 2017-09-11 18:58:45 · 356 阅读 · 0 评论 -
Treap入门题
bzoj1691bzoj3234bzoj1588bzoj1691排序维护一维满足,另一位用treap维护#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b原创 2017-09-02 17:37:21 · 334 阅读 · 0 评论 -
bzoj 3043 差分
思路:考虑差分后的数列,需要将每个除1以外的数变为0#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)usin原创 2017-09-01 19:33:31 · 348 阅读 · 0 评论 -
bzoj2152点分治
考虑三的倍数的计算: 即t[1]∗t[2]+t[0]2t[1]*t[2]+t[0]^2(每一个点对都计算两次),然后用整个点减去只在子树中出现的即可#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i原创 2017-09-10 19:45:13 · 324 阅读 · 0 评论 -
bzoj1787 [Ahoi2008]Meet 紧急集合 树上倍增
树上给出任意三个点,找出一个点使它到三个点的距离之和最小 结论:枚举任意两个点的lca,求出距离取最小值 伪证一发: 首先考虑x,y两个点的情况,显然lca(x,y)是最小值,加入第三个点z后,可以看成a,b,已将在lca(a,b)的一个点,向上的花费为2.而z的花费为1.为了是花费最小.考虑让z跳到lca(a,b),枚举lca(a,b)即可 PS:倍增难得1A的题(bzoj1977WA了一原创 2017-09-06 08:31:10 · 325 阅读 · 0 评论 -
bzoj4145 [AMPPZ2014]The Prices 状压dp
题目大意:你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i][j],求最小总费用。 1<=n<=100,1<=m<=16,1<=d,c<=1e61 <= n <= 100, 1 <= m <= 16, 1 <= d, c <= 1e6 思路:f[i][j]为到i处现在购买的状态.很容易想到的一种是枚举上一个状态和现在的状态,然后转移原创 2017-08-24 10:48:33 · 366 阅读 · 0 评论 -
bzoj 1112 treap
枚举每一个区间,用treap维护中位数和子树和更新答案#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#define ll long long #define linf 9223372036854775807LLusing namespace std;inli原创 2017-09-03 11:21:04 · 371 阅读 · 0 评论 -
bzoj 1211[HNOI2004]树的计数
题目链接 prufer序列可以知道度数为d的点会出现d-1次,而一共有n-2 个数出现, 显然可以由排列公式得知:ans=(n−2)!∏ni=1(di−1)!ans=\frac{(n - 2)!}{\prod_{i = 1}^{n}{(d_i - 1)!}} Ps:乘法中会爆掉long long可以用唯一分解定理表示我会说这样预处理,我跑了bzoj倒数第二!!!,也可以用多个数的乘积表示.注意原创 2017-08-21 18:50:59 · 299 阅读 · 0 评论 -
两道模版题 UOj 35 和 bzoj1036
后缀数组排序树剖后缀数组排序:#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespac原创 2017-08-11 15:09:10 · 267 阅读 · 0 评论 -
bzoj 1965[Ahoi2005]SHUFFLE 快速乘+快速幂
一开始以为是找循环节 晕 一 一+ x∗2m≡l(modn+1)x*2^m\equiv l (mod n+1) x≡l∗(n/2+1)mx\equiv l*(n/2+1)^mCode:#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b原创 2017-08-20 09:21:14 · 324 阅读 · 0 评论 -
bzoj 3224: Tyvj 1728 普通平衡树
Splay 模版#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<cstdlib>#include<queue>#include<vector>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod原创 2017-08-08 19:53:56 · 240 阅读 · 0 评论 -
bzoj1588
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<cstdlib>#include<queue>#include<vector>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) f原创 2017-08-08 21:13:52 · 377 阅读 · 0 评论 -
bzoj 1477 exgcd
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;typedef long long ll;ll x,y,m,n,l,a,b,c,d;void e原创 2017-08-17 16:54:32 · 386 阅读 · 0 评论 -
bzoj2440(二分+莫比乌斯函数)
题目大意思路Code题目大意:询问从一开始的第k个不是完全平方数的正整数倍的数思路:这当考试题目做的,一开始以为用筛法预处理所有数,然后O(1)回答询问,结果n有1e9,显然O(n)都不可做.然后考虑枚举完全平方数的平方因子,这样把数据缩小到1e4~1e5左右. 然后我们发现直接询问第k个有些难做,不如把问题转化为一个存在性问题:即是否存在一个数n使得前面有k个数.这样我们二分这个n. 现在原创 2017-08-19 21:25:52 · 301 阅读 · 0 评论 -
bzoj 3238 Ahoi2013 后缀数组+单调栈
题目链接 思路:先不看lcp部分,若只有len[i] 则ans=(n−1)×∑ni=1ans=(n-1)\times\sum_{i=1}^n 然后就变成了一个跑后缀数组得到height值+RMQ的题目 等等……枚举的时间复杂度为O(n^2)明显超时,那么我们需要在O(n)或者O(nlog)的时间内处理出区间的最小值,注意我们并不需要知道具体的每一个区间是多少,只用知道总值就可以了~~ 我们原创 2017-08-15 18:46:31 · 351 阅读 · 0 评论 -
bzoj 1600
f[i][j]表示前i份用j的方案数,成立条件是任意三边之和都大于第四边#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b原创 2017-08-22 22:10:49 · 281 阅读 · 0 评论 -
bzoj 4034: [HAOI2015]树上操作(线段树+dfs序)
操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 用dfs序进栈+1出栈-1+线段树区间修改,查询维护 PS:线段树又写挂了,调试了很久啊~~#include<iostream>#include<cstdio>#include<cmath>#include<cs原创 2017-09-04 19:50:16 · 530 阅读 · 0 评论 -
bzoj1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压dp
题意:给定n个集合,询问能够组成一种特定集合所能选的最大个数 很水的题,注意循环顺序(我一开始写反了)#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b)原创 2017-09-13 16:52:55 · 429 阅读 · 0 评论 -
bzoj2073: [POI2004]PRZ 状压dp
想一下最优子结构,要解决一个集合,那么它的真子集一定是最优的,所以枚举子集,由子集转移过来3163^{16}.预处理,每个子集的时间和重量. PS:本来维护集合想用类似树状数组的方法 ,但时间不具有区间可加性#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#defin原创 2017-09-13 16:01:18 · 431 阅读 · 0 评论 -
bzoj1602[Usaco2008 Oct]牧场行走(lca模版)
Lca裸题#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;cons原创 2017-09-05 16:58:01 · 330 阅读 · 0 评论 -
bzoj2046分裂
只可会意,不能言传的一道题 注意:枚举状态从1开始而不是0,因为sum0=0sum_{0}=0会影响答案#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b)原创 2017-09-13 14:40:50 · 434 阅读 · 0 评论 -
bzoj 3038 线段树
维护一个标记,当值为0或1时便不用修改#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++) #define fod(i,a,b) for(int i=a;i>=b;i--)using name原创 2017-08-27 18:56:40 · 335 阅读 · 0 评论 -
bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
题目大意:给定一个长度为n的序列,询问任意相差都大于给定k的排列的数量一开始做的时候看错题了,以为只要任意有一个就要计算方案数,设计了一个状态 fi,j,k,lf_{i,j,k,l} i表示当前算了i个,j表示当前压缩的状态,k表示当前结尾,l表示此时为混乱或混乱Orz 正确的只有fi,jf_{i,j}i表示结尾,j表示状态,不需要第几个的原因是枚举的状态是递增的,求计算当前状态是基于已经计算好原创 2017-09-13 10:50:34 · 405 阅读 · 0 评论 -
bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压dp
题目大意:没有放置限制和左上,右上,左下,右下限制的bzoj1087 [SCOI2005]互不侵犯King 做法同, 先预处理合法的状态,然后转移 PS:枚举当前这一层和上一层状态的顺序是不重要的(即j,kj,k),因为无论什么顺序,上一层的答案都全部被处理出来了#include<iostream>#include<cstdio>#include<cmath>#include<cstri原创 2017-09-13 09:31:07 · 443 阅读 · 0 评论