自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

折戟沉沙

深夜的光都留在心里,犹如不会熄灭的火焰燃烧着

  • 博客(146)
  • 收藏
  • 关注

原创 博客停更~~~

csdn新皮肤太恶心了,受不了,于是乎换了

2017-09-14 22:03:32 513

原创 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 522 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 513

原创 【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 458

原创 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 417

原创 bzoj2073: [POI2004]PRZ 状压dp

想一下最优子结构,要解决一个集合,那么它的真子集一定是最优的,所以枚举子集,由子集转移过来3163^{16}.预处理,每个子集的时间和重量. PS:本来维护集合想用类似树状数组的方法 ,但时间不具有区间可加性#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#defin

2017-09-13 16:01:18 413

原创 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 419

原创 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 379

原创 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 429

原创 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 403 1

原创 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 305

原创 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 381

原创 集训考试2

今天四道原题: T1:BZOJ1179 APIO2009抢掠计划 缩点+spfa最长路 T2:bzoj2081Beads 枚举每一个可能的k(调和级数O(nologn)O(nologn)),然后字符串hash+map(set)记录出现数#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<

2017-09-12 16:39:57 329

原创 Codevs1506

判断一个点是否在环上,暴力深搜,知道重复为止#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 na

2017-09-11 21:10:45 351

原创 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 351

原创 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 347

原创 集训考试1

T1: 题目大意:有n个点,使它们与某个点直接或间接相连 题解:裸Kruskal#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=

2017-09-11 16:13:51 295

原创 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 310

原创 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 298

原创 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 351

原创 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 327

原创 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 376

原创 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 386

原创 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 270

原创 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 247

原创 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 239

原创 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 314

原创 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 318

原创 【bzoj1103】[POI2007]大都市meg DFS序

可以发现每次修改实际上就是对于树的点权的修改,每次询问就是路径求和.利用DFS序的性质,实际上就是单点修改区间求和.对于修改(a#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define

2017-09-05 11:47:35 268

原创 Poj3221 dfs序

利用dfs序的子树连续的性质,用线段树单点修改,区间查询 PS:与子树修改,路径查询的dfs不同,一般不需要记录出栈序,只需要记录出栈位置#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#

2017-09-05 11:09:17 330

原创 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 518

原创 Zoj 2112 线段树套Treap

树套树入门题 树套树空间复杂度分析:维护一个长度为n的序列,线段树的结点数一般为4n,而Treap则是对于每一个元素(包括重复出现的)都需要一个空间,那么第1层的所需要的空间为(1*n),第二层为(2*n/2)……所以其实为O(h)*n. 那么所需的空间为O(nlogn)O(nlogn)但在实际运用中,所形成的线段树往往不是完全二叉树,即最后一层并不满,所以上述空间会非常吃紧,所以一般为O(4n

2017-09-04 08:58:59 354

原创 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 354

原创 AtCoder Beginner Contest 072

T1: A-B B>A时输出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--)using namespac

2017-09-02 21:57:53 248

原创 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 326

原创 bzoj3343 分块

分成n个块,对于每个块排序,修改时对于整块维护一个增加值的标记.散块暴力维护.对于询问在整块中二分查找,散块暴力比较 PS:第一次正式写分块,~~还有点小激动呐Orz~~QAQ#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(

2017-09-01 22:10:25 260

原创 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 337

原创 LightOJ 1118 树状数组+离线

题目大意:给出一个序列,每次询问(l,r)区间的不同的数的个数 思路:将每个询问按照r升序排序,若当前到达i,a[i]出现过,则之前位置-1,当前位置+1,若没有出现过则当前位置+1 为什么要sum[r]-sum[l-1]是对的:因为当前计算贡献的对应的有且只有一个,并且其值对应的位置是最新的位置 为什么按照升序排列:因为按照升序排列保证我们当前出现的值都在所要询问的区间之内.否则会出现它的值

2017-09-01 17:11:36 433

原创 POJ 2155 二维树状数组+差分

题目大意:给定一个初始时全部为0的n*n的矩阵,然后将一个子矩阵中的全部元素取反,询问一个元素当前是什么 思路:将取反操作当成转化为操作次数,容易得到若操作次数为偶数则为0否则为1.将问题转化为区间修改+单点查询.对于区间修改用差分实现,则答案为所有前缀和.用树状数组维护即可 PS:这题输入很恶心,数后还有一个空格#include<iostream>#include<cstdio>#incl

2017-09-01 15:21:34 358

原创 Codevs1082 线段树练习三(树状数组)

终于抽出时间学了一发树状数组的区间修改用c[i]=a[i]−a[i−1]c[i]=a[i]-a[i-1] 很容易得到:a[i]=∑i=1cia[i]=\sum_{i=1} c_{i} s[i]=(i−1)⋅c[i]s[i]=(i-1)\cdot c[i] 那么到n的答案为 ans=(n−1)⋅∑i=1ci−∑i=1sians=(n-1)\cdot\sum_{i=1} c_i-\sum_{i=

2017-08-29 22:02:49 376

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除