自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lych的博客

nothing

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

原创 bzoj 2560: 串珠子 子集dp

虽然我这么弱但做做这种sb题还是没问题的。。。都水了一个早上sb题了还不狗带       令f[i]表示集合为i时的方案数,然后全集减去不合法的就好了。不合法的话可以用一个定点来枚举。时间复杂度O(3^N+N^2·2^N)。AC代码如下:#include#include#include#define ll long long#define mod 1000000007usin

2016-04-16 09:05:23 1335

原创 bzoj 2306: [Ctsc2011]幸福路径 倍增+floyed

这道题果然是倍增卡精度。。。。       首先可以得到走2^k步时,f[i][j]表示i~j的最大收益;那么第2^(k+1)步就有f[i][j]=min{f[i][k]+f[k][j]*ρ^(2^(k+1))},然后当ρAC代码如下:#include#include#include#define N 105using namespace std;int n,m; doub

2016-04-16 08:21:34 988

原创 bzoj 3505: [Cqoi2014]数三角形 数学

整天sb题切切人生没希望了。。。       枚举一下gcd乱搞搞下就好了,注意可以正反搞要*2。AC代码如下:#include#include#include#define ll long long#define C(x) (ll)(x)*((x)-1)*((x)-2)/6using namespace std;int m,n,g[1005][1005];int ma

2016-04-16 07:21:21 371

原创 bzoj 3609: [Heoi2014]人人尽说江南好 数学

哈哈哈刷rank1好开心~\(≧▽≦)/~虽然最后还是rank2o(╯□╰)o       可以证明任何人存在一种方案,使得最后剩下的为:m,m,......,m,n%m       这样组数确定就可以确定先后手辣!怎么证明呢?显然如果原来是m,m,....m,那么新加入1个必然会让组数+1;否则由于第一步一定是1+1=2,而存在一个组数AC代码如下:#includeusing

2016-04-15 20:18:51 1464

原创 bzoj 2121: 字符串游戏 动态规划

令dp[i][j][k][l]表示母串中左端点为i,右端点为j,能否删到只剩下第k个字符串的前l位,ok[i][j]表示母串i~j能否删完,显然有ok[i][j]=dp[i][j][k][len[k]]的并。两种情况转移一下即可。       注意dp[i[j][k][l]为bool且l只有21位于是可以把最后一位压起来可以快很多。       另外我个人认为存在更优的写法但是想不出来QA

2016-04-15 19:24:21 1536

原创 bzoj 4515: [Sdoi2016]游戏 树链剖分

       首先可以把修改转换一下,因为那个dis非常不爽。显然s~t的路径有s~lca和lca~t组成。令d[x]表示x的深度,对于s~lca上面的点,修改的值相当于a*(d[s]-d[x])+b=-a*d[x]+(b+a*d[s]),lca~t上面的点的值相当于a*(d[s]+d[x]-2*d[lca])+b=a*d[x]+(b+a*(d[s]-d[lca]*2)),这样就可以得到新的a'和...

2016-04-15 14:55:47 3193 6

原创 bzoj 4524: [Cqoi2016]伪光滑数 优先队列

做多了poi的题这道就成了一眼题了。。。       另外bzoj上面的题面是什么东西啊。。。       题意:若一个数M(M>1),将M质因数分解后得到的有重复的质因数序列排序后最大的为ak,例如当M=12时a1=2,a2=2,a3=3。如果满足ak^k       显然发现最大的质因数以及是第几个直接定义了该数是否为基于N的伪光滑数。那么定义一个四元组(t,x,y,z)表示当前的

2016-04-15 08:17:17 1526

原创 bzoj 2229: [Zjoi2011]最小割 分治&网络流

做过ZJOI2016(QAQ)的旅行者之后这道题目就变成一眼出的题了。。。       首先选两个点跑最小割更新答案,然后把和S连在一起的递归下去,和T连在一起的递归下去就好了。。但是不会证明。。。。。AC代码如下:#include#include#include#define N 205#define M 6005using namespace std;int n,m,

2016-04-15 07:39:25 799

原创 bzoj 4520: [Cqoi2016]K远点对 k-d tree

用优先队列维护一下最大的k个,然后和第k个比较看能否更新即可。枚举每个点直接在k-d tree里面查询,这样会造成重复就把k变成2k即可。AC代码如下:#include#include#include#include#include#define ll long long#define sqr(x) (ll)(x)*(x)using namespace std;int n

2016-04-14 20:40:04 1554 3

原创 bzoj 4066: 简单题 k-d tree

这道题目由于空间为20M因此只能使用k-d tree。由于在线插入可能会导致不平衡,因此需要使用替罪羊树的思想暴力重构,保证时间复杂度。由于k-d tree是查询大于插入的,因此可以把平衡因子设的小一点(代码中的0.7还是不够小)。AC代码如下:#include#include#include#include#include#define N 200005using names

2016-04-14 19:25:44 819

原创 bzoj 2960: 跨平面 最小树形图 朱-刘算法

首先用set找出所有的区域,然后对于一条边在相邻的区域之间连有向边,然后新建一个根连向所有点跑朱-刘算法即可。AC代码如下:#include#include#include#include#include#define ll long long#define N 3005#define M 30005using namespace std;int n,m,cnt,tot

2016-04-14 16:13:54 872

原创 bzoj 1185: [HNOI2007]最小矩形覆盖 旋转卡壳

先求出凸包,显然至少需要有一条边在凸包上(我只会感性理解不会证明QAQ),那么旋转卡壳一下就好了。AC代码如下:#include#include#include#include#include#define eps 1e-12#define N 50005using namespace std;struct point{ double x,y; }a[N],q[N],t[

2016-04-14 10:21:33 813

原创 bzoj 1187: [HNOI2007]神奇游乐园 插头dp

一道最裸的插头dp,然而还是调了很久。。代码2.6k+调试语句1.5k。。不过这次代码很多可以不需要的但是这种题目关键还是要思路清晰。。。       然而窝用了3进制作死时间被爆出翔。。。。       令dp[i][j][k]表示在第i行第j列状态为k时的最大收入,其中k表示插头的状态,即一个括号序列。令上面一段连续的在轮廓线上的左端点为'(',右端点为')',或者也可以看成是从左端点

2016-04-14 07:59:51 1002

原创 bzoj 3232: 圈地游戏 01分数规划

首先二分答案(dinkelbach?不知道行不行),然后就变成判断是否可行了。       这里有一个比较巧妙的方法,就是给圈地定一个方向,不妨为逆时针,那么向上走就相当于把它左边的加入答案;向下走就相当于把它左边的从答案中减去,然后判断是否存在负权回路即可。       另外还可以网络流建图,所有块从S连边容量为价值,然后在外面加一圈向T连边容量为边权inf,然后任意两个相邻的块(包括外

2016-04-13 18:51:12 1004

原创 bzoj 2299: [HAOI2011]向量 数学

显然前面四个和后面四个相互独立。       设前面四个的贡献为(u1*a,v1*b),后面的为(u2*b,v2*a),那么就相当于:       u1*a+u2*b=x且v1*b+v2*a=y,同时需要满足2|u1-v1,2|u2-v2       然后可以将(u1,v1,u2,v2)分(0,0,0,0)(1,1,0,0)(0,0,1,1)(1,1,1,1)分类讨论,只要一组满足就满

2016-04-13 16:19:51 1344 1

原创 bzoj 2959: 长跑 lct

显然,如果没有环的话,走的就是两点之间的唯一路径。直接用lct维护即可。       但是现在有环,显然可以把环缩到一个点,那么用并查集维护一下即可。剩下的使用lct即可。       嘴巴AC还是很简单的。。。AC代码如下:#include#include#include#define N 150005using namespace std;int n,m,a[N],

2016-04-13 13:37:18 1031

原创 bzoj 2964: Boss单挑战 动态规划

又一次跌倒在字母大小写上。。。QAQ。。       可以发现回血,魔攻,特攻都是相互独立的,因此可以分开来分别dp,然后可以得到在不死的情况下第i回合能进行多少次攻击,以及i回合最多能魔攻多少血,特攻多少血,然后合起来就得到答案了。AC代码如下:#include#include#include#define clr(ar) memset(ar,0,sizeof(ar))#de

2016-04-13 09:10:16 1093

原创 bzoj 1937: [Shoi2004]Mst 最小生成树 费用流

首先可以对于一条非树边(x,y,len1),对应的树上x~y的链中的某一条边(u,v,len2),如果有len1=len2-len1。       显然一条非树边对应一个a,一条树边对应一个b,然后a+b>=len2-len1相当于最大权匹配中的顶标号。那么建一个二分图跑最大匹配即最大费用流(不需要满流)。AC代码如下:#include#include#include#defin

2016-04-12 11:22:33 1006

原创 bzoj 3600: 没有人的算术 替罪羊树

窝终于能自己手打替罪羊树辣~~~!(←妈的智障,还不是抄黄学长的)       在cls的那篇论文里面讲到了用替罪羊树实现O(logN)修改,O(1)询问两个节点的前后关系,这道题目就是要用到这个。       首先是不是感觉这个括号序列很高大上呢~~?(づ ̄ 3 ̄)づ实际上,我们可以用三个排名来表示一个括号序列,分别为l,r,v,其中v表示的就是这个括号序列在当前所有已经出现过的括号序列

2016-04-12 08:26:34 1443

原创 bzoj 4503: 两个串 fft

没想到这种字符串题居然可以用fft。。。       设有两个串S1,S2,定义S1和S2的距离为:Σ(i=1,n) (s1[i]-s2[i])^2,那么两个串相同当且仅当距离=0。那么现在S2存在通配字符'?',于是可以修改一下距离为:Σ(i=1,n) s2[i]*(s1[i]-s2[i])^2。       那么把S2翻转一下就变成卷积的形式了,直接上fft即可。注意可以把多次的点值的

2016-04-11 19:32:10 1719

原创 bzoj 3601: 一个人的数论 高斯消元&莫比乌斯反演

AC代码如下:#include#include#include#define ll long long#define mod 1000000007#define inv(x) ksm(x,1000000005)using namespace std;int m,n,a[105][105],p[1005],q[1005];int ksm(int x,int y){ int t

2016-04-11 15:39:22 1207

原创 bzoj 1195: [HNOI2006]最短母串 状压dp

令f[i][j]表示所选的字符串的集合用二进制表示为i,最后一个字符串为j时的最短母串。那么通过预处理一个数组c[i][j]表示将j接在i后面需要拓展多少位就可以实现O(N)转移。那么状态数为O(N2^N),时间复杂度就是O(N^2·2^N)。       注意到这道题目需要按字符串字典序输出,因此还需要用s[i][j]表示最短的母串中字典序最小的(必须记录整个母串否则会错,因此部分网上题解有

2016-04-10 15:52:44 2380 2

原创 bzoj 1910: [Ctsc2002] Award 颁奖典礼 动态规划

令f[i][j][k][x]表示第i行,从j~k列状态为x的时的最大值。x=0表示第一个矩形;x=1表示第二个矩形;x=2表示第三个矩形,然后构造两个辅助数组转移即可。AC代码如下:#include#include#include#define N 205using namespace std;int m,n,s[N][N],dp[2][N][N][3],g[N][N][2];

2016-04-09 21:01:50 675

原创 bzoj 3993: [SDOI2015]星际战争 二分答案&网络流

为了学ISAP做了一下这道题。感觉ISAP并没有比DINIC难打多少。。。       二分答案后源点向激光连边,权为伤害总量;激光向可以达到的机器人连无穷大;机器人向汇点连边,权为装甲值。然后汇点的边满流就满足答案。       但是奇怪的是把二分的上界设成5e6就能过,改成sum(所有机器人装甲值的和)就过不了。。然后加上一句 if (l>sum)while(1); 之后还是过了。。说

2016-04-09 16:13:48 665

原创 bzoj 4504: K个串 主席树

首先来看如何快速求出区间[l,r]的答案。预处理pre[i]表示和a[i]相同的数上一次出现的位置,如果a[i]第一次出现则per[i]=0。那么[l,r]的答案就相当于求[l,r]中所有pre[]       因此可以构建主席树,第i棵树表示右坐标为i时,里面节点[u,v]的值就是左端点在[u,v],右端点为i时的最大值。那么可以发现第i棵树相对于第i-1棵树只有pre[i+1]~i的每一个

2016-04-08 15:57:22 1885 1

原创 bzoj 1063: [Noi2008]道路设计 树形dp

注意一条路径可以先向上走再向下走。       那么如果我们对于每一个点,在所有向下的路径中选择最长的两条,然后把这两条全部变成铁路。那么假设f(x)为有x节点的树的最大可能答案,那么就有f(x)       那么就可以用f[x][y][z]表示以x为根的子树中,最大换乘次数为y,且x向儿子连出z(z=0,1,2)条边的答案数。注意f[x][y][z]=0和f[x][y][z] mod Q

2016-04-08 11:13:44 821

原创 bzoj 2523: [Ctsc2001]聪明的学生 记忆化搜索

我个人认为题面中最后一句话的提示才是关键。。。然而窝智商不足推不出来,(更不要说提示中的稍加推理了)       先看一下怎么样可以推出这三个数字,对于一个人,加入它看到的是x,y,那么显然他头上的数只可能是x+y或者|x-y|,那么他能得到结论当且仅当通过观察或者推理排除了一种情况,那么他头上的数字只可能是另一种了。那么现在根据提示,显然最先得出结论的那个人头上的数字只可能是x+y,也就是他

2016-04-08 09:19:09 1529

原创 bzoj 3107: [cqoi2013]二进制a+b 构造

日常orzPo爷的时候看到的。感觉挺好玩的就推了一下md发现自己智商不够。       感觉举个例子真是简单易懂啊。下面的a,b,c均表示原题中a,b,c的位数:另外不妨令a       1.c000111111101100000111000000010       令f(a,b,c)表示满足c       2.a0001111001111111100111

2016-04-07 20:18:48 991

原创 bzoj 3161: 孤舟蓑笠翁 bfs

显然,可以把左手在i点,右手在j点缩成一个状态(想到这个就基本结束了),那么去掉不合法的状态之后,可以根据停顿点的移动条件得到一个状态可以转移到那些状态。这就相当于一个图,而边权都是1,然后要求的就是离一个特殊点最近的特殊点。       注意是平面图,因此用bfs得到一个点离它最近的特殊点以及距离,将这个点加入该特殊点的“势力范围”,那么对于一对特殊点(u,v),v是离u最近的特殊点当且当u

2016-04-07 15:15:03 789

原创 bzoj 3162: 独钓寒江雪 树形dp&hash

首先最大独立集一定是很好求的把。。       题目中的是无根树,那么不妨转化成有根树,显然取重心作为根一般不会发生问题,因为这种情况下同构的子树形态完全相同;但是特殊情况是重心有2个的情况,如果直接取一个作为根的话会造成子树被破坏,解决方法是新建一个点作为根,向两个中心连边。       令f[x][0]表示不取x的本质不同的最大独立集的个数,f[x][1]表示取x的本质不用的最大独立集

2016-04-07 11:12:57 1219

原创 bzoj 2958: 序列染色 递推

令f[i][j][k]表示到第i位,状态为j,第i位为k的方案数。其中状态0表示之前没有k个B和k个W;1表示只有k个B;2表示之前有k个B和k个W。转移的时候只需要得到这一位填某一个字母的情况下会不会产生新的k个连续串,然后该加的地方加上,改去掉重复方案的去掉即可。AC代码如下:#include#include#include#define mod 1000000007#defi

2016-04-06 20:57:48 1466

原创 bzoj 2547: [Ctsc2002]玩具兵 bfs&最大匹配

在lrj的某一本书(蓝书?紫书?黑书?我不知道>_       首先可以把交换看成是更改职业,那么二分答案x,我们就得到了每个玩具兵(不包括天兵)可以到达的目标格。那么连一条边就得到一个二分图,跑最大匹配即可。       注意不能直接判断是否有完美匹配,还要考虑天兵,因为我们可以让天兵到x个地方然后作x次交换,那么在跑最大匹配的时候不把天兵加进去,然后判断是否有最大匹配数+x>=n即可。

2016-04-06 18:29:44 954

原创 bzoj 3143: [Hnoi2013]游走 高斯消元

对每一个点设f[i]为期望从i出发的次数(第一次从1出发不算),那么有:f[n]=0;f[1]-1=Σf[x]((x,i)为一条边);f[x]=Σf[y](x≠1,(x,y)为一条边)。       然后解出方程,那么得到一条边的期望经过次数,按期望经过次数从大到小一次赋为1~m即可。AC代码如下:#include#include#include#include#include

2016-04-06 15:39:57 1302

原创 bzoj 3206: [Apio2013]道路费用 最小生成树

注意到k很小,那么我们把这给定的k条边设为-inf跑最小生成树,此时最小生成树中非这k条边的边是一定要加入最终的最小生成树的,那么可以将点缩在一起,这样就只剩下k+1个点了。然后对原图中的点跑最小生成树(缩点后的最小生成树),此时最小生成树中的边是可能要选的。那么就只剩下k条边了。       然后就可以2^k枚举要选的边的子集,注意要选的边不能构成环。然后就得到了一颗树,随便乱搞一下就好可。

2016-04-06 13:09:56 1468

原创 bzoj 3211: 花神游历各国 树状数组

注意到任意一个正数经过不超过5次操作就变成1,之后就不变了;0经过永远不变。那么可以用一个链表来表示某一个数之后的第一个>1的数,然后用并查集来合并即可。AC代码如下:#include#include#include#include#define N 100005#define ll long longusing namespace std;int n,m,a[N],fa[

2016-04-06 13:04:44 559

原创 bzoj 4448: [Scoi2015]情报传递 dfs序列&树状数组

首先遍历得到dfs序列,离线后按照C排序再从小到大插入和查询,每一次相当于单点修改和链上查询,然后用树状数组来维护区间修改单点查询就好了。(根本不需要用什么树链剖分)。O(NlogN)+常数小,成功用小号刷到rank2。       这道题目其实是可以在线的,C相当于一个颜色,然后把dfs序列改成括号序列(这样就不会有多次修改重复用一个东西了)。使用带修改的主席树(树状数组套可持久化线段树)或

2016-04-05 16:21:36 1130

原创 bzoj 4316: 小C的独立集 树形dp

仙人掌树形dp。       令f[x][0]表示以x为根的子树中,不选x的最大值;f[x][1]表示选x的最大值。       注意到,同一个环中的所有点,只有在dfs树中最高的那个点才会对所在环之外的点的f[]值造成影响。因此我们在最高的那个点做一个dp,然后就得到了最高那个点的f[],而这个环中的其他点的f[]就不用管了。AC代码如下:#include#include#d

2016-04-05 13:04:23 721

原创 bzoj 1917: [Ctsc2010]星际旅行 树形dp解决树上网络流

如果把限制看做流量上界,那么答案相当于从根节点1到树上所有点的最大流。       由于有Hi>=i的度数,那么可以想象在最坏情况下(比如所有Hi=i的度数),答案至少是根节点走过所有点之后回到根节点,然后去掉一个点i到根节点的那些路径。       那么可以想象答案大概就是根节点回到根节点的最大流量,这样做完以后就不存在某一对点(x,y),使得xy一条边,同时x,y的可出发次数都>0。然

2016-04-05 10:16:56 1622

原创 bzoj 4459: [Jsoi2013]丢番图 数学

现在开始解方程:去分母得到:xy=xn+yn       移项:xy-xn-yn=0       两边同加n^2得到:xy-xn-yn+n^2=n^2       左边因式分解得到:(x-n)(y-n)=n^2       因此       答案就是n^2的约数个数/2(向上取整)       而一个数的约数个数等于所有质因数的次数+1的乘积。       然后就好了。

2016-04-04 20:48:40 1143 5

原创 bzoj 3531: [Sdoi2014]旅行 树链剖分

树剖后直接对每一个宗教建立一颗线段树维护就好了。AC代码:#include#include#include#define N 100005#define M 10000005using namespace std;int n,m,trtot,tot,dfsclk,a[N],b[N],d[N],fa[N],fst[N],pnt[N<<1],nxt[N<<1],pos[N],an

2016-04-04 20:43:36 581

空空如也

空空如也

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

TA关注的人

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