
BZOJ
CHN_JZ
爆0 forever
展开
-
[普通型母函数+容斥+FFT]BZOJ 3771:Triple
看到ZZK大佬的blog写的太好啦,所以就“转”来了。题目概述CHNJZ有nn把价值不一样的斧子,ZigZagK偷走了11把或22把或33把,对于每个可能的总损失,计算有几种可能的方案。解题报告emm……显然是母函数啊?但是有数量限制。由于最多偷走三把,所以我们可以直接三种情况都讨论过去。11把:母函数:A(x)=xa1+xa2+xa3+...+xanA(x)=x^{a_1原创 2018-01-10 19:24:09 · 599 阅读 · 0 评论 -
[凸包]BZOJ 1670——[Usaco2006 Oct]Building the Moat护城河的挖掘
题目梗概给出一堆点,求把这些点包起来的最小边长。解题思路题目描述的就是凸包所解决的问题。因为NOIP要到了,所以复习一下凸包。#include<cmath>#include<cstdio>#include<algorithm>using namespace std;const int maxn=5005;struct jz{ double x,y; jz(double x=原创 2017-10-12 21:32:48 · 438 阅读 · 0 评论 -
[二分+差分]BZOJ 4326——NOIP2015 运输计划
题目梗概给出一棵有边权的树,并有m个从x到y的路径。将一条边的边权改为0,使所有路径的最大值最小。解题思路因为要使最大值最小,所以我们二分答案。对于大于答案的路径,我们要修改它。那么就是把这些路径的交集中最大的边改为0。求路径交集差分一下就可以了,在差分的时候只需要LCA就可以了。#include<cmath>#include<cstdio>#include<cstring>#include<原创 2017-10-12 20:12:02 · 997 阅读 · 0 评论 -
[DP]BZOJ 1190——[HNOI2007]梦幻岛宝珠 动态规划]
题目梗概一个背包问题,但是有一些奇怪的条件。背包大小<=2302^{30} N<=100N<=100 物品符合a∗2b(a<=10;b<=30)a*2^b(a<=10;b<=30)题目梗概把背包大小看成一个二进制数。将f[i][j]f[i][j]定义为前i位数,2i2^i这位选择了j个大小。枚举第i−1i-1位填kk,显然剩下的j−kj-k都由第ii位填满,所以可以得到转移方程f[i][j]=max原创 2017-10-06 16:16:20 · 931 阅读 · 0 评论 -
[二维树状数组]BZOJ 1452—— [JSOI2009]Count
题目梗概给出一个N*M的方格,每个方格有一个数字。每次更改某个格子上的数字或询问一个子矩阵的某值的个数。解题思路裸的二维树状数组,对每个值分别开数组记录就可以了。#include<cstdio>#include<cstring>using namespace std;const int maxn=25,maxm=125,tt=45989;struct jz{ int x[maxm][原创 2017-10-06 15:17:34 · 701 阅读 · 0 评论 -
[Tarjan]BZOJ 1051—— [HAOI2006]受欢迎的牛
[Tarjan]BZOJ 1051—— [HAOI2006]受欢迎的牛题目梗概给出A喜欢B的关系,这个关系可以传递。求被所有牛喜欢的牛的数量。解题思路缩点之后,出度为0的强连通分量的大小就是答案。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxm=50005,maxn=1原创 2017-10-06 11:21:51 · 1142 阅读 · 0 评论 -
[整体二分+树状数组]BZOJ 2527——[Poi2011]Meteors
题目梗概有n个国家,需要pi个陨石。在每个时间在某个区间会落下x个陨石。问每个国家何时收集完陨石。解题思路比较明显的整体二分。二分时间t,表示每个国家何时收集完陨石。把时间t之前的所有陨石砸下(可以用树状数组维护),判断是否收集完然后继续二分。#include<cstdio>#define LL long long#define lowbit(x) ((x)&-(x))using namesp原创 2017-10-06 10:02:27 · 1085 阅读 · 0 评论 -
[最小割]BZOJ 1497——[NOI2006]最大获利
题目梗概有m个通讯,你可以获得一定的利润。但是通讯必须开通ai,biai,bi两个中转站,开通中转站需要额外的费用。问你能获得最大的利润是多少。解题思路你要换个角度思考这个问题,把边看成一个点。如果要获得这个点的值就必须开通另外两个点。这样显然会形成一张二分图,但是我们会在这张图上进行取舍。显然每种取舍方式都对应一种最小割。以上只是简略的概述了这个思想,详见胡伯涛的《最小割模型在信息学竞赛中的应用》原创 2017-10-19 16:25:25 · 798 阅读 · 0 评论 -
[最小费用最大流]BZOJ 1070 [SCOI2007]——修车
题目梗概要修n辆车,有m个修理员,给出每个修理员修每辆车的时间。求最短时间(一次只能修一辆车)。解题思路把每个修理员看成是在n个时段的修理员。如果要第k个时段用到第j个修理员修车i,那么对后面 的影响是f[i][j]∗(n−k+1)f[i][j]*(n-k+1)建立超级汇连接n辆车,超级汇连接拆分后的修理员,修理员和车之间按以上关系相连。容量显然都是1,刷费用流就可以了。#include<cstdi原创 2017-09-29 19:11:07 · 522 阅读 · 0 评论 -
[矩阵快速幂优化DP]BZOJ 4037——Str
题目梗概你有一个长度为nn的数字串。定义f(S)f(S)为将S拆分成若干个的1~m数的和的方案数。你可以将这个数字串分割成若干个数字(允许前导0),将他们的f()f()加起来。比如g(123)=f(1+2+3)+f(1+23)+f(12+3)+f(123)g(123)=f(1+2+3)+f(1+23)+f(12+3)+f(123)。已知字符串和m后求答案对998244353998244353取模后的原创 2017-10-07 19:58:51 · 875 阅读 · 0 评论 -
[斜率优化]BZOJ 1911—— [Apio2010]特别行动队
题目传送门解题思路转移方程不难推出。f[i]=max(f[j]+a∗(s[i]−s[j])2+b∗(s[i]−s[j])+c)f[i]=max(f[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c)转化后可得f[i]=max(f[j]+a∗s[j]2−b∗s[j]−2∗a∗s[i]∗s[j])+a∗s[i]2+b∗s[i]+cf[i]=max(f[j]+a*s[j]^2-b*s[原创 2017-09-28 17:06:01 · 581 阅读 · 0 评论 -
[分块]BZOJ 4216——Pig
题目梗概给定一个数组。多次询问一个区间的和。解题思路这不是SB题你要想想这是BZOJ的题目,请忽略A+B。你没有足够的空间构造前缀和,但是你能存储下这个数组。那就只能用分块了。#include<cmath>#include<cstdio>#include<algorithm>#define LL long longusing namespace std;inline int _read()原创 2017-08-15 21:28:02 · 633 阅读 · 0 评论 -
[KMP+矩阵快速幂加速]BZOJ 1009——[HNOI2008]GT考试
题目梗概给出一个不吉利数字A1A2...Am(0<=Ai<=9)有M位A1A2...Am(0<=Ai<=9)有M位。求有多少个n位数满足不包含不吉利数字。解题思路读完题目便能想到一个显然的数位DP,F[i][j]F[i][j]表示长度为i,有长度为j的后缀与不吉利数字匹配。考虑如何转移。发现所有失配到j的状态都可以转移,所以要提前用KMP构造,假设我们构造出矩阵T。但是发现还是超时。接下来我们考虑这原创 2017-08-14 20:32:01 · 582 阅读 · 0 评论 -
[左偏树+lazy思想]BZOJ 4003——[JLOI2015]城池攻占
题目梗概一棵有根树,每一个节点都是一个城池,有一个防御值si。有若干个战士,第i 个战士初始攻击力为 ai,初始攻击的城池为 ci。如果攻击力大于等于城池的防御值,则攻击成功,战士继续攻击父节点,否则攻击失败。攻击完第i 个城市后战士的攻击力会加上一个数或者乘以一个数(每一个城池属性不同)。每一个战士都是独立的,问每一个战士攻占了几个城池。解题思路先来说说大致思想,我们考虑从叶子节点开始处理,在每个原创 2017-08-06 21:25:13 · 828 阅读 · 0 评论 -
[数学+枚举]BZOJ 4921——互质序列
题目描述现在给定一个长度为n的序列,你需要从中删除一个非空连续子序列,使得剩下至少2个数,令E为剩下数的最大公约数的期望值,S为合法的方案数,请计算E*S的值。因为这个值可能非常大,请对998244353取模输出。解题思路最后答案是E*S,所以跟概率没有毛线关系,答案就是所有gcd情况的加和。 因为是删除一个连续的子序列,所以剩下的数肯定是一段前缀和一段后缀的gcd。 其次我们知道前缀或后缀的g原创 2017-07-28 22:29:02 · 1264 阅读 · 0 评论 -
[树hash]BZOJ 4337——BJOI2015 树的同构
题目梗概对于两个树T1和T2,如果能够把树T1的所有点重新标号,使得树T1和树T2完全相同,那么这两个树是同构的。有M个有根树,请你把它们按同构关系分成若干个等价类。解题思路第一次写树hash。对于一棵树,先把所有子树hash一下,然后在合并成当前树的hash值。考虑如何合并。因为我们不能受遍历顺序的影响,所以应该先排序。然后对于每个子树的hash值再分别乘p,显然这个p不能相同,所以提前构造素数表原创 2017-10-15 20:47:36 · 761 阅读 · 0 评论 -
[树链剖分]bzoj 4034—— [HAOI2015]树上操作
题目描述有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。解题思路树链剖分的裸题。更改一棵子树的值,就是在DFS序上更改一段区间。询问时,每条重链其实也可以看成一段区间,构造DFS先遍历重儿子就可以原创 2017-10-15 20:55:36 · 416 阅读 · 0 评论 -
[二进制分组维护凸包]BZOJ 4140—— 共点圆加强版
[二进制分组维护凸包]BZOJ 4140—— 共点圆加强版题目描述在平面直角坐标系中,Wayne需要你完成n次操作,操作只有两种:1.0 x y。表示在坐标系中加入一个以(x, y)为圆心且过原点的圆。2.1 x y。表示询问点(x, y)是否在所有已加入的圆的内部(含圆周),且至少在一个圆内部(含圆周)。为了减少你的工作量,题目保证圆心严格在x轴上方(纵坐标为正),且横坐标非零。解题思路如果不强制原创 2017-12-28 18:10:53 · 927 阅读 · 1 评论 -
[Splay]BZOJ 1208——[HNOI2004]宠物收养所
题目描述最近,阿Q开了一间宠物收养所。收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值。这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者原创 2017-11-27 20:20:42 · 591 阅读 · 0 评论 -
[主席树]BZOJ 3524——[Poi2014]Couriers
题目描述给一个长度为n的序列a。1≤a[i]≤n。 m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2。如果存在,输出这个数,否则输出0。解题思路直接上主席树。构造权值线段树,询问时不停遍历节点数最多的一边就可以了。但是要注意:最后停下的节点并不是出现次数最多的节点但对于这道题,如果有解这种方法一定正确。#include<cstdio>using原创 2017-11-26 21:12:57 · 549 阅读 · 0 评论 -
[左偏树]BZOJ 2809——[Apio2012]dispatching
题目描述在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。在这个帮派里,有一名忍者被称之为 Master。除了 Master以外,每名忍者都有且仅有一个上级。为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送。现在你要招募一批忍者,并把它们派遣给顾客。你需要为每个被派遣的忍者 支付一定的薪水,同时使得支付的薪水总原创 2017-11-26 21:06:41 · 543 阅读 · 0 评论 -
[二分+DFS序上DP]BZOJ 4753—— [Jsoi2016]最佳团体
题目梗概题目给定一棵树,选K个节点。任意节点满足如果它被选其父亲也必须被选。使得价值与花费之比最大。解题思路这类题目显然是要二分的。最初的想法,在树上进行左儿子右父亲DP合并,这样每次check的效率是O(n^2)。但是怎么卡就是不过(我下面给出的就是树上合并的代码)。我将其归结为常数过大,记住其效率是稳定的。因此引进DFS序上DP,可以想象常数极小。fi,jf_{i,j}表示DFS序的前i个选择j原创 2017-12-05 20:19:11 · 838 阅读 · 0 评论 -
[最小割]BZOJ 3175—— [Tjoi2013]攻击装置
题目描述给定一个矩阵,这个矩阵上有一些位置可以放置装置。装置会日字形互相攻击,求最多可放置多少个装置。解题思路因为日字形相互攻击的两个点肯定满足一个坐标和是奇数,另一个是偶数。将矩阵看成零一奇偶矩阵,那么互相攻击的装置可以形成一个二分图。答案显然是总数-最小割。怎么思考?最小割不存在同时选择两个装置且互相攻击(因为不满足最大流)。#include<cstdio>#include<cstring>原创 2017-12-13 20:51:59 · 754 阅读 · 1 评论 -
[点分治]BZOJ 2152——聪聪可可
题目描述给出一棵有边权的树。求边权和%3=0的路径数。解题思路累计以每个点为路径LCA的方案数,所以直接点分就好了。累计方法为分别找出距离某个点路径和为0,1,2的方案数,返回2∗t[1]∗t[2]+t[0]∗t[0]2*t[1]*t[2]+t[0]*t[0]然后减去所以子树方案就是当前方案。#include<cstdio>#include<algorithm>using namespace s原创 2017-12-12 20:17:40 · 610 阅读 · 0 评论 -
[虚树+树形DP]BZOJ 2286—— [Sdoi2011]消耗战
题目梗概给出一棵有比边权的树。每次给出K个点,询问使这K个点不与1联通所需要砍掉的边权总和最小值。解题思路假如只有一次询问,显然可以用树形DP解决,f[i]f[i]表示使i的子树下所有特殊点与1不连通的最小代价,转移状态显然。但是多次询问会超时,但是∑K\sum K与n同阶,所以就变成虚树的裸题。虚树的基本思想是,每次询问不需要遍历所有点,于是我们只存关于特殊点的图,边权显然是路径上的最小边权。关于原创 2017-12-12 18:21:40 · 523 阅读 · 0 评论 -
[树形DP+贪心]BZOJ 1217—— [HNOI2003]消防局的设立 Plus?
题目描述给出一棵树。你可以设置一个特殊节点,距离这个节点小于等于2的节点被覆盖。求覆盖所有节点所需的最小特殊节点数。解题思路这题是51 Nod 夹克老爷的愤怒的弱化版。51Nod上的那题将范围推广至于n同阶的级别。主要就是利用贪心进行树形DP。#include<cstdio>using namespace std;const int maxn=100005,INF=2147483647;int原创 2017-12-03 21:21:52 · 435 阅读 · 0 评论 -
[数学杂题]BZOJ 2111—— [ZJOI2010]Perm 排列计数
题目梗概求[1,n]有多少个排列满足Pi>Pi/2P_i>P_{i/2}解题思路不难发现排列构成一个小根堆,因此树形可以确定。然后用f[i]f[i]表示以第i个节点为根的方案数。转移方程不难得出。最主要的是这题虽然P很大但是依然要用Lucas,为什么呢?因为处理n的阶乘时到后面%P会变成0,所以要限制阶乘的范围。WA了5发才反应过来。#include<cstdio>#include<algorit原创 2017-12-03 20:51:34 · 597 阅读 · 0 评论 -
[Lucas定理+中国剩余定理]1951—— [Sdoi2010]古代猪文
题目梗概求G∑d|n(nd)%PG^{\sum _{d|n} (^n_d)}\%P解题思路由欧拉定理可得原式=G∑d|n(nd)%ϕ(P)%P=G^{\sum _{d|n} (^n_d)\%\phi(P)}\%P(nd)(^n_d)由Lucas定理可得,然后ϕ(P)=999911658=2∗3∗4679∗35617\phi(P)=999911658=2 * 3 * 4679 * 35617可以用中国原创 2017-12-03 19:41:29 · 580 阅读 · 0 评论 -
[基环外向树+树形DP]BZOJ 1040—— [ZJOI2008]骑士
题目描述有n个骑士,每个骑士有一个不想一起组队的人。每个骑士还有一个战斗力,求战斗力最大的队伍。解题思路把每个骑士和不想组队的骑士之间连边,会形成一堆基环外向树形成的森林。假设每个联通块是树,边数=n-1,显然不符合。假设每个联通块存在两个及以上的简单环,边数>n,也不符合。所以图必然是基环外向树形成的森林。先随意建树寻找返祖边,确定两个点和一条边。分别以这两个点为树根并砍掉这条边进行树形DP,f[原创 2017-12-11 19:04:41 · 684 阅读 · 0 评论 -
[树状数组]BZOJ 2028——[SHOI2009]会场预约
题目梗概有两种操作:一种是插入一段区间,并删除与这段区间相交的区间,返回删除区间的个数。另一种是返回目前的区间数。解题思路有一个非常重要的特性是在任何时候区间的末端随区间的始端递增而递增。于是考虑树状数组维护始端个数的前缀和,维护这个就可以二分查找小于等于某个点最近的始端。知道始端的位置后,我们可以得到相应的末端,如果形成相交就删去这个区间(其实就是删去始端)。因为始末端的单调性,当查找出的区间不形原创 2017-10-25 17:01:59 · 609 阅读 · 0 评论 -
[Lucas 原理+逆元]BZOJ 4403——序列统计
题目描述给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对10^6+3取模的结果。解题思路显然L,R的大小对答案没有影响,但是相对大小有影响,设m=R−L+1m=R-L+1用隔板法可推出长度为n的方案数(n+m−1m−1)(^{n+m-1}_{m-1})于是总方案就是∑ni=1(i+m−1m−1)\sum_{i=1}^{n}(^{i+m-1}_{m原创 2017-10-24 20:03:23 · 555 阅读 · 0 评论 -
[水题]BZOJ 1257——[CQOI2007]余数之和sum
题目描述给出正整数n和k,计算kk modmod 1+k1 + k modmod 2+k2 + k modmod 3+…+k3 + … + k modmod nn的值。解题思路先把k mod n看成k−n∗n/kk-n*n/k显然对于n/k相同的n形成了一个区间,区间的范围就是n/(n/k+1)+1n/(n/k+1)+1~n/(n/k)n/(n/k)区间的个数显然不超过n√\sqrt n个。然后乱搞原创 2017-08-20 16:07:41 · 667 阅读 · 0 评论 -
[树形DP]BZOJ 4033—— [HAOI2015]树上染色
题目梗概给定一棵树,树边有边权。将树上KK个点染成黑色,其余n−Kn-K个点为白色。使相同颜色节点的路径和最大。解题思路不难想到是一个树形DP的题目。考虑每一条边要被计算的次数,我们在进行左儿子右兄弟的合并时,考虑一棵子树的根节点和其fa节点的合并,边就是连接这两个节点的边。这条边加上的值=子树黑点数(n-子树黑点数)+子树白点数(k-子树白点数)枚举子树黑点数,不断修正就可以了。#include<原创 2017-08-05 21:52:48 · 1078 阅读 · 2 评论 -
[并查集+启发式合并]BZOJ 2733——[HNOI2012]永无乡
Ps:又水听博主解释一下:昨天模拟赛遇到启发式的裸题,愣是打成左偏树的合并,惭愧惭愧。于是今天找到裸题练习一下。题目梗概有n个节点,每个节点有一个独一无二的权值。 合并一些节点。 询问一个节点所在联通块的权值第k大的节点,不存在则输出-1。解题思路什么SB题 这显然是平衡树的一道模板题,并且涉及到启发式合并。 启发式合并听着高大上其实是非常暴力过程。 当两棵平衡树合并时,把节点数较少的平衡原创 2017-07-28 14:31:53 · 840 阅读 · 0 评论 -
BZOJ 1588 [HNOI2002]营业额统计——双向链表
1588: [HNOI2002]营业额统计题目描述营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低原创 2017-04-19 21:32:01 · 655 阅读 · 1 评论 -
BZOJ 1787 [Ahoi2008]Meet 紧急集合——LCA
1787: [Ahoi2008]Meet 紧急集合原创 2017-04-20 21:18:56 · 429 阅读 · 0 评论 -
BZOJ 1878 [SDOI2009]HH的项链——离线+树状数组||莫队算法
1878: [SDOI2009]HH的项链题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。输入第一行:一原创 2017-04-23 14:56:25 · 815 阅读 · 0 评论 -
BZOJ 1854 [Scoi2010]游戏——二分图匹配
1854: [Scoi2010]游戏题目描述lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。 游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害原创 2017-04-25 23:11:28 · 763 阅读 · 0 评论 -
BZOJ 2190 [SDOI2008]仪仗队——欧拉函数
题目传送门解题思路 假设原点为(0,0),可以发现对于坐标(i,j),如果满足gcd(i,j)=1,这个点就肯定能看到,所以有2∗∑i=2nphi(i)2*\sum_{i=2}^{n}phi(i)个点肯定满足。然后不要忘记(0,1),(1,0),(1,1)这三个点。#include<cstdio>using namespace std;int n,ans;int phi(int x){原创 2017-05-03 08:10:37 · 576 阅读 · 0 评论 -
BZOJ 4443 [Scoi2015]小凸玩矩阵——二分+二分图匹配
4443: [Scoi2015]小凸玩矩阵题目描述 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最小值是多少。 输入 第一行给出三个整数N,M,K 接下来N行,每行M个数字,用来描述这个矩阵 输出 如题 解题思路 看到这样选择方式马上就会想到二分图匹配,但是因原创 2017-05-11 19:33:37 · 730 阅读 · 0 评论