BZOJ
Sakai_Masato
这个作者很懒,什么都没留下…
展开
-
[BZOJ3571][HNOI2014]画框
我反正是绝对做不出来。 我们把每个决策的∑x\sum x和∑y\sum y看做点(x,y)(x,y),那么最优解只有可能是下凸壳的点,而且在xx最小的点A和yy最小的点B之间的下凸壳。我们先求出A、B,观察得在线段AB下方离线段AB最远的点C一定在下凸壳上,这样就可以分治(A,C)和(B,C)了。 怎么求C? S△ABC最大S_{\triangle ABC}最大即cross(C−A,B−A)c原创 2016-03-01 21:49:05 · 533 阅读 · 0 评论 -
[BZOJ2324][ZJOI2011]营救皮卡丘
思考如何满足要摧毁点N,必须摧毁前N-1个点。 我们设dis[i][j]为从i到j且不经过大于max(i,j)的点的最短路。 原题转化成了求K条路径覆盖,使得这些路径的权值和最小。 考虑网络流里面的二分图模型最小路径覆盖里面的拆点。 每个点要拆成i和i’,分别表示进入这个点和出去这个点。 源点向0号点连一条容量为K,费用为0;对于每一个点i,向所有的点j(j>i)的j’连接一条容量为1,费原创 2016-02-29 21:49:42 · 1096 阅读 · 0 评论 -
[BZOJ3142][HNOI2013]数列
这题我的公式好像不能化简,于是膜拜了一下题解。 先做差分A[1]...A[k−1]A[1]...A[k-1],那么满足这个差分的初始票价为的方案数有: n−∑i=1k−1A[i]n-\sum\limits_{i=1}^{k-1}A[i],那么总方案有: ∑所有序列(n−∑i=1k−1A[i])\sum\limits_{所有序列}(n-\sum\limits_{i=1}^{k-1}A[i]),原创 2016-03-23 21:09:38 · 540 阅读 · 0 评论 -
BZOJ1500维修数列Splay
不得不说这题目真的猥琐,写一个小时调一晚上加一上午,还被卡常了。 这里不放题解,主要来总结一下Splay区间修改比较猥琐的地方。 一 、查找第k大的时候一定要记得push_down; 二、有改值标记的题目push_down一定要写成改值的push_down,今天我才知道我以前写的线段树都是jg,全是错的标记方式。 三、注意一下边界问题和Splay函数里的push_down和update操原创 2016-02-02 15:13:37 · 405 阅读 · 0 评论 -
[BZOJ2434][NOI2011]阿狸的打字机
发现一种新的思路,以前从来没有见过的,即AC自动机的fail树。 这一题我们先考虑暴力,从root往Y的最后一个点走,如果走到了X的末点,ans++,如果通过fail指针走到了X的末点,ans++。 反过来考虑,从X的末点往root走,如果当前点在Y串或者通过反向的Fail到了Y串,ans++。 又发把fail反向之后得到的是一棵树,那么也就是要求在X末点的子树里有多少个Y点,转化为DFS序后原创 2016-02-08 16:25:55 · 479 阅读 · 0 评论 -
BZOJ 1031后缀数组
题意 题解:裸后缀数组,在此后缀数组写错表示很忧伤。 最后的那个m=p也是必要的!吔屎了。 模板#include<ctime> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<cassert> #includ原创 2016-01-30 15:01:19 · 372 阅读 · 0 评论 -
[BZOJ2049]洞穴勘测[BZOJ2157]旅游Link-Cut Tree模板题
第一次写LCT,先来两道模板题,因为上个月被三道区间维护的超级工业的splay搞傻了,吸取了很多教训(见前几篇博客),所以LCT写得很顺啊,这里要感谢hzwer的题解。 BZOJ 2049:给出一颗树,每次加一条边或者删除一条边,询问两点的连通性。 这是一眼题,最裸的,纯天然的LCT,如果你不会先去看论文吧。半年以前看LCT感觉是一个非常高端的东西,当时反正看不懂,而TTY又有LCT爷的称号,写原创 2016-02-16 14:25:27 · 697 阅读 · 0 评论 -
[BZOJ1010][HNOI2008]玩具装箱[BZOJ1911][APIO2010]特别行动队[BZOJ1492][NOI2007]货币兑换 斜率优化
今天因为刷不动ydc的题,只能搞搞LCT和斜率优化,上午搞了LCT,下午搞斜率优化,其实我本来是想看冬令营的课件的,发现正好有斜率优化,也写得很好。玩具装箱直接上方程好了。 设dp[i]dp[i]表示前ii个玩具的答案,记s[i]s[i]为物品前缀和,那么: dp[i]=min(dp[j]+(i−j+s[i]−s[j]−L)2),(j<i)dp[i]=min(dp[j]+(i-j+s[i]-s[原创 2016-02-16 20:45:50 · 640 阅读 · 0 评论 -
[BZOJ3672][NOI2014]购票 树分治斜率优化
废话不多说,直接上方程。 dp[i]=min(dp[j]+(dis[i]−dis[j])×p[i]+q[i])dp[i]=min(dp[j]+(dis[i]-dis[j])\times p[i]+q[i]) 考虑xx是yy的儿子,且xx比yy优: dp[x]−dis[x]∗p[i]<dp[y]−dis[y]∗p[i]dp[x]-dis[x]*p[i]<dp[y]-dis[y]*p[i] 设T原创 2016-02-21 14:04:00 · 727 阅读 · 0 评论 -
[BZOJ2756][SCOI2012]奇怪的游戏
如果我们知道了要变成的数dd,怎么检验这个答案可不可行。 将整张棋盘黑白染色,黑点连向四边的白点,容量为无穷大,源点连向黑点,容量为d−v[i]d-v[i],白点连向汇点,容量为d−v[i]d-v[i],最后检查是否满流。 那么当m∗nm*n为偶数时,可以二分答案。 奇数时,不妨设黑格子比白格子多一个,不管怎么操作,黑格子的和与白格子的和的差是定值,设为difdif,再设最后变成的数为dd,有原创 2016-02-24 21:40:31 · 673 阅读 · 0 评论 -
[BZOJ3572][HNOI2014]世界树
这一题调试了蛮久,而且我一写虚树常数就大,是rank1的17倍。 显然是一道虚树题。建出虚树后,先两遍DFS处理出每个虚树上的点的归属,然后考虑虚树每一条边的贡献。 定义sizesize为原树每个子树大小 对于一条边(u,v)(u,v),设xx为原树中uu的儿子vv的祖先。 bel[u]=bel[v]bel[u]=bel[v],ans[bel[u]]+=size[x]−size[v]ans[原创 2016-03-04 21:54:21 · 727 阅读 · 0 评论 -
[BZOJ2286][SDOI2011]消耗战
设dp[i]dp[i]表示ii所在的子树里面所有的询问点与ii不连通的最小代价,那么dp[i]=∑min(dp[j],w[i][j]),j∈son[i]dp[i]=\sum min(dp[j],w[i][j]),j\in son[i],直接dp会TLE,发现询问的点数很少,那么建立虚树就可以了,一般虚树的题都很明显的。。 虚树就是关键点以及它们两两LCA所形成的树。 我写的常数好大QAQ。#in原创 2016-03-03 14:36:57 · 592 阅读 · 0 评论 -
[BZOJ1093][ZJOI2007]最大半连通子图
先缩点,就转化成了求一条最长链和求有多少条这样的最长链。 关键是第二个的dp,设dp[i]表示到第i个点,有多少条最长路经过它,那么 dp[i]+=dp[u]dp[i]+=dp[u] (u→i,dis[u]+w[v]=dis[v])(u\rightarrow i,dis[u]+w[v]=dis[v])#include<ctime> #include<cstdio> #include<cstdl原创 2016-02-15 17:33:43 · 660 阅读 · 0 评论 -
HNOI2016题解
最小公倍数考虑暴力做法,对于每一个询问,暴力加入满足询问的边,然后维护联通性和maxa,b,如果满足条件则YES。 两个条件的限制似乎很难用别的数据结构优化掉,那么考虑分块,先以a为第一关键字,b为第二关键字排序,每m0.5m^{0.5}分成一块。然后把每一个询问归类到相应的块中,使得这个询问的a大于等于块的a最小值小于等于最大值。 依次扫每个块,把每个块的询问取出来。设当前的块号是ii,那么我原创 2016-04-30 15:41:10 · 895 阅读 · 0 评论