自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Icefox的博客

生活不止眼前的苟且,还有诗和远方。

  • 博客(1245)
  • 资源 (3)
  • 收藏
  • 关注

原创 loj2473/bzoj5250「九省联考 2018」秘密袭击(树形背包dp)

求树上所有连通块的权值第K大的和。 正解大概fft的本质吧qaq不会qaq 还好暴力可过。 我们考虑枚举每一个点,计算它对答案的贡献,即以这个点为第K大的连通块个数。为了避免重复,相等的我们也要钦定大小关系。 我们把所有点按点权从大到小排序,以这个点为根,之前的点标1,其余点标0.我们就是要求必须包含根的大小为K的连通块个数。可以背包dp解决。写的太丑会O(nk2)O(nk2)O(nk^2...

2018-05-11 20:31:07 528

原创 bzoj5253 [2018多省省队联测]制胡窜(SAM+线段树合并+树上倍增+数学)

这题细节好多阿orz好毒瘤阿orz首先我们对于每一个询问子串,如果处理出了他的所有出现位置,那么我们反过来求,就是要求用两个断点把所有线段都断开的方案数。处理出所有询问子串的出现位置可以SAM+parent树上倍增来快速定位子串所在节点,这个节点的Right集合就是所有的出现位置。我们可以用线段树合并来维护这个Right集合。复杂度O((Q+n)logn)O((Q+n)logn)O((Q+...

2018-05-10 19:05:38 772

原创 hdu4812 D Tree(点分治)

求路径上所有点的点权积为K的最小的点对。(字典序最小) 点分治即可。b[x]表示前缀积为x的最小的点的标号。

2018-05-08 22:29:32 206

原创 bzoj5340/loj2552「CTSC2018」假面(期望与概率+背包dp)

这签到题送我见祖宗了啊qaq 全世界都A了这题,像我这样只拿了10分的傻子怕是不多了吧。我们考虑怎么求最后的期望生命值。 因为减到0血就不减了,所以我们不能直接每次期望算,只好考虑一个背包转移。 dp[i][j]表示i减了j滴血的概率。减了K[i]滴血就代表i死了。 每次攻击时对x做一个O(mi)的背包转移即可。 最后对每个人枚举减j滴血的情况计算即可。我们考虑“结界”询问。 即就是问活

2018-05-08 21:17:46 642 1

原创 bzoj3270 博物馆(概率dp+高斯消元)

设dp[i][j]表示第一个人在i,第二个人在j的概率。 我们有转移: dp[i][j]=dp[i][j]∗p[i]∗p[j]+∑kmp[k][i]∗p[j]∗(1−p[k])/du[k]+∑kmp[k][j]∗p[i]∗(1−p[k])/du[k]+∑k1∑k2mp[k1][i]∗mp[k2][j]∗(1−p[k1])∗(1−p[k2])/du[k1]/du[k2]dp[i][j]=dp[i]

2018-05-08 20:11:50 272

原创 bzoj1778 [Usaco2010 Hol]Dotp 驱逐猪猡(概率dp+高斯消元)

设dp[i]为到点i的概率。则我们有转移 dp[i]=∑jdp[j]∗(1−p)∗mp[j][i]/du[j]dp[i]=\sum\limits_{j}dp[j]*(1-p)*mp[j][i]/du[j] 对于点1还要额外加1. 但是因为转移是带环的,我们没法转移。 我们采用高斯消元,解这n个方程即可。 复杂度O(n3)O(n^3)注意有孤立点!精度其实要求1e-9!#include <b

2018-05-08 20:04:38 247

原创 bzoj3944 Sum(杜教筛)

杜教筛裸题。。。 mu函数的前缀和怎么搞呢,我们有μ∗1=ϵ\mu*1=\epsilon 令g=1就好了。

2018-05-07 21:09:12 204

原创 bzoj3930 [CQOI2015]选数(容斥+递推+数论)

首先我们有:在[l,R]中选若干不完全相同的数,他们的gcd<=R-L。反证即可。 我们设f[i]表示gcd恰好为K*i的个数。(选若干不完全相同的数),考虑容斥计算,倒着推即可。 f[i]=(R-L)^n-(R-L)-f[i*j] (R=r/(ki),L=(l-1)/(ki)) 最后特判一下是否可以是完全相同的K。 复杂度O(nlogn)O(nlogn

2018-05-06 21:29:03 218

原创 bzoj4916 神犇和蒟蒻(杜教筛)

第一问就是在逗你玩…只有i=1时才得1,其他时候都得0,因此前缀和永远为1。 考虑第二问。ϕ(i2)=i∗ϕ(i)\phi(i^2)=i*\phi(i) 因此f(x)=x∗ϕ(x),求s(x)=∑i=1xf(i)f(x)=x*\phi(x),求s(x)=\sum\limits_{i=1}^xf(i) 还是利用杜教筛的套路: g(1)s(n)=∑i=1n(g∗f)(i)−∑d=2ng(d)s(

2018-05-06 20:47:23 237

原创 bzoj4805 欧拉函数求和(杜教筛)

杜教筛就是用来快速处理积性函数前缀和的东西。 比如我们要求∑i=1nϕ(i)\sum\limits_{i=1}^n\phi(i),n<=1e9 线性是不够的!我们需要更好的计算方法。 设f(x)=ϕ(x),s(x)=∑i=1xf(i),g(x)f(x)=\phi(x),s(x)=\sum\limits_{i=1}^xf(i),g(x)为积性函数。 那么我们有∑i=1n(f∗g)(i)=∑i=

2018-05-06 20:35:23 335

原创 bzoj4515 [Sdoi2016]游戏(树链剖分+李超线段树)

我们把x->y的路径分为x->t,t->y两部分来考虑(t为x,y的lca) 分别化出只跟dis[v]有关的函数。然后就可以树链剖分+李超线段树来维护最小值了。因为要求区间最小值,所以还要维护区间最小值。 复杂度O(nlog3n)O(nlog^3n)

2018-05-06 00:06:52 209

原创 bzoj4504 K个串(主席树+堆)

很类似bzoj2006。 只是这次的区间和比较难算,我们需要建主席树来求。 rt[i]的每个叶节点x,表示右端点为i时左端点为x时的答案。 每个节点要维护区间最大值,及最大值所在位置。 我们有两种操作,区间加和查询区间最大值。 区间加的主席树比较麻烦。下放时要新建节点太慢了。 我们可以考虑标记永久化。不下放标记。 然后类似超级钢琴那题用堆来维护贪心就好啦。 或者也可以每次去删掉最大...

2018-05-05 16:38:07 232

原创 bzoj3938 Robot(李超线段树+离散化)

水题写一年系列。 每个机器人的位置随时间的函数应该是个分段函数,每一段都是一次函数。 我们可以离线,把时间离散化掉,就是维护若干线段的最值。 可以先都插进去,然后最后处理询问。 可以用李超线段树来解决。分别维护最大最小值。 复杂度O(nlog2n)O(nlog^2n)

2018-05-03 16:28:10 286

原创 bzoj3165 [Heoi2013]Segment(李超线段树)

李超线段树维护线段! 找到覆盖的logn个区间,然后像直线一样去做就好了。 复杂度O(nlog2n)O(nlog^2n) 注意特殊处理不存在斜率的线段。

2018-05-03 10:54:39 200

原创 bzoj1568 [JSOI2008]Blue Mary开公司(李超线段树)

李超线段树,就是用来维护若干一次函数在某点上的最值。 即维护一堆直线/线段。 我们利用标记永久化的思想,每个节点记这个区间的最优势线段(即在这个区间暴露最多的线段)。 我们考虑新加一条直线如何维护。 如果这个区间没有最优势线段,那么直接覆盖。 如果这个区间的最优势线段完全高于新线段,那么直接返回。 如果这个区间的最优势线段完全低于新线段,那么直接覆盖。 如果有交点,算交点,暴露较多的为

2018-05-03 09:21:37 187

原创 CF976F Minimal k-covering(网络流)

对于K-covering 我们建图:原图的边i->n1+j,容量为1.S->左边的点i,容量为du[i]-K,右边的点j->T,容量为du[j]-K。跑最大流。m-最大流就是答案。没流量的边就是还在的边。我们考虑从大到小枚举K,就可以每次直接在残余网络上给每个点新加1的流量,直接跑即可。 因为最大流最大是m的,而我们最多跑m次。所以复杂度是O((n+m)2)O((n+m)^2)

2018-05-02 21:46:46 339

原创 bzoj2006 [NOI2010]超级钢琴(st表+堆)

求连续子段和的前K大。 做个前缀和,把子段和变成sum[r]-sum[l]。 考虑r=i时,左端点一定是在一个范围内选一个最小的。 可以用st表+rmq来O(1)得到。 我们把这些扔进优先队列贪心取最大即可。 考虑对于i我在可选择区间[l,r]选了x之后,选别的还有可能在前k大。可是我们很难把x删掉。于是我们把[l,r]分裂成两半[l,x-1],[x+1,r]。即可。 因此我们优先队列需

2018-05-02 20:11:16 265

原创 51nod1228 序列求和(伯努利数+数学)

求S(n,k)=∑i=1nikS(n,k)=\sum\limits_{i=1}^ni^k 可以O(k2)O(k^2) 递推。 用伯努利数可以做到O(k)O(k) ∑i=1nik=1k+1∑i=1k+1Cik+1∗Bk+1−i∗(n+1)i\sum\limits_{i=1}^ni^k=\frac{1}{k+1}\sum\limits_{i=1}^{k+1}C_{k+1}^i*B_{k+1-i}*

2018-05-02 09:04:37 498

原创 bzoj3261 最大异或和(可持久化Trie)

明天就要正式开始省选之后的康复训练了呢,毕竟距离ctsc就只有那么几天了qaq(感觉自己药丸)

2018-05-01 21:54:08 217

原创 bzoj4128 Matrix(BSGS+高斯消元,矩阵求逆+Hash表)

BSGS,只不过变成了矩阵。 学习了一下矩阵求逆,用高斯消元来做即可。O(n3)O(n^3) 还是把系数矩阵放左面,右边的常数向量变成了一个单位矩阵。高斯消元即可,最后左边变成了一个单位矩阵,右边就是我们的逆矩阵。

2018-04-28 20:20:01 225

原创 bzoj1316 树上的询问(点分治)

询问m个长度的路径是否存在。 我们点分治,每次一个子树子树的做,拿一个数组记一下存在的长度,然后拿当前子树的长度去查询是否存在。因为长度只有1e6,所以可以直接拿一个bool数组去记。复杂度O(nlognm)O(nlognm) 如果长度1e9的话,就需要set/hash表来支持了吧qaq

2018-04-28 19:13:40 256

原创 luogu3805【模板】manacher算法

敲敲敲,敲板子。

2018-04-28 15:20:04 189

原创 loj108 多项式乘法(FFT模板题)

手写complex,大概可以快了一倍吧qaq 我认输,我手写complex还不行吗! 因为是模拟大整数乘法,所以最后的系数最大不超过1e5*9*9,因此也可以ntt。FFT#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;#include &lt;complex&gt;#includ...

2018-04-28 14:46:30 318

原创 loj103 子串查找(kmp/Hash模板题)

KMP模板题#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;#include &lt;queue&gt;using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 1000010inline int...

2018-04-28 13:49:56 246

原创 bzoj4517 [Sdoi2016]排列计数(错排+组合数学)

错排。 递推公式:Dn=(n−1)(Dn−1+Dn−2),D1=0,D2=1D_n=(n-1)(D_{n-1}+D_{n-2}),D_1=0,D_2=1 通项公式:Dn=n!∑k=2n(−1)kk!D_n=n!\sum\limits_{k=2}^n\frac{(-1)^k}{k!} 可以用容斥原理来理解。此题答案就是CmnDn−mC_n^mD_{n-m}

2018-04-28 13:38:06 226

原创 loj6038「雅礼集训 2017 Day5」远行(lct+树的直径)

维护一下树的直径,用lct动态维护两点间距离。

2018-04-28 13:10:11 291

原创 bzoj4310 跳蚤(SA+二分答案+贪心)

原题描述有误,应该是把原串分成最多k个子串,然后在每个子串中挑出字典序最大的子串,使得这些串中最大的字典序最小。我们二分答案是第K小子串,用SA搞出这个串的位置,然后去贪心判定是否可行,即是否存在一种划分使得所有子串都小于等于这个串。如何贪心判定呢?首先如果有一个s[i]>s[ansl],则肯定怎么划分都不行。不然的话我们从后往前判断,如果当前串的大小超过了答案串,则必须砍一刀,我们贪心的砍在最前面

2018-04-28 12:43:13 300

原创 bzoj5073 [Lydsy1710月赛]小A的咒语(SA+lcp+dp+贪心)

考虑dp,f[i][j]表示A串前i字符分成j段能匹配的最大B串前缀长度。 那么如果i+1不选,转移到f[i+1][j]如果i+1选,则我们可以贪心的尽量多匹配一些,即匹配t=lcp(i+1,f[i][j]+1)个,转移到f[i+t][j+1]我们SA+RMQ预处理一下,O(1)查询lcp即可。复杂度O(T(nk+nlogn))O(T(nk+nlogn)) 注意多组数据的一些细节,比如rk要清零

2018-04-27 22:01:05 314

原创 bzoj4236 JOIOJI(map)

我可能是个智障【再见】 一开始脑残的一发二分答案,这有单调性么大哥【再见】 哎…然后又各种锅x 考虑我们要满足s1i−s1j=s2i−s2j=s3i−s3js_{1i}-s_{1j}=s_{2i}-s_{2j}=s_{3i}-s_{3j} 移一移得到两个式子:s1i−s2i=s1j−s2j,s1i−s3i=s1j−s3js_{1i}-s_{2i}=s_{1j}-s_{2j},s_{1i}-s

2018-04-27 16:32:10 238

原创 bzoj4229 选择(lct+并查集维护边双)

倒着做,加边,维护边双。 lct+并查集。类似:portal 见一次不会一次系列qaq

2018-04-27 14:52:36 382

原创 bzoj4571 [Scoi2016]美味(主席树+按位贪心)

考虑如果没有+x,那么直接可持久化Trie+按位贪心即可。 有+x怎么办呢?我们考虑在Trie树上跑的过程,实际上每次选择时就是看一个区间内有没有数。那么我现在就是要把这个区间左移x位即可。用主席树模拟Trie树的这一过程即可。 复杂度O(nlogn+mlog2n)O(nlogn+mlog^2n)

2018-04-27 13:39:48 265

原创 bzoj4567 [Scoi2016]背单词(Trie+贪心)

把串反过来插出Trie树。 可以发现,一定要先把自己得祖先节点都插进去再插自己。 我们只保留根节点和所有单词结尾节点,得到一棵树。我们现在的问题就转化为: 给定一棵树,给每个点标号,要求每个点的标号比自己的父亲的标号要大,求最小化∑xa[x]−a[fa[x]]\sum\limits_xa[x]-a[fa[x]] 这是个贪心的经典问题?对于一个点,把儿子按子树大小从小到大排序,按顺序访问即可。

2018-04-27 11:08:24 214

原创 bzoj4569 [Scoi2016]萌萌哒(并查集+倍增)

考虑暴力做法,就是每次把对应位置都用并查集合并了。最后答案就是9*10^(连通块个数-1)。然而这样太暴力了,怎么优化呢? 我们考虑倍增的思想,用id[j][i]这个点表示j…j+(1< < i)-1这一段。我们每次合并两个对应区间时,变成合并logn个对应区间。 最后再从上往下推到i=0.即如果id[x][i]和id[y][i]联通,则id[x][i-1],id[y][i-1]也联通,id[x

2018-04-27 09:38:20 319

原创 bzoj3218 a + b Problem(主席树优化建图+最小割)

首先我们考虑朴素建图,S->i,bi ; i->T,wi ; i->i’,pi ; i’->j,inf,如果j会使得i变奇怪。 但是这样最后一类边可能O(n2)O(n^2),gg 我们考虑主席树优化即可。 点数O(2n+nlogn)O(2n+nlogn) 边数O(2nlogn+4n+nlogn)O(2nlogn+4n+nlogn)

2018-04-27 08:52:20 307

原创 bzoj4276 [ONTAK2015]Bajtman i Okrągły Robin(线段树优化建图+最大费用流)

显然是个最大费用流。 线段树优化建图即可。

2018-04-26 23:37:52 282

原创 bzoj3073 [Pa2011]Journeys(线段树优化建图+最短路)

一个区间的点向另一个区间的点连双向边。求单源最短路。 我们考虑线段树优化建图。 因为有两个方向,因此我们需要建两颗线段树。 A线段树儿子向父亲连边,表示一条有向边的起点 B线段树父亲向儿子连边,表示一条有向边的终点 B线段树的每个节点向A线段树的对应节点连边(一条有向边的终点,同时是下一条有向边的起点,其实只连叶子就行) 这些边边权均为0.然后对于每一天,新建一个节点表示(a,b)->(

2018-04-26 22:47:22 306

原创 bzoj3681 Arietta(dsu on tree+主席树优化建图+网络流)

显然就是个建图最大流。然而边数爆炸。 我们考虑每个节点维护一棵线段树表示子树信息来优化建图,然后边数还是爆炸。 我们再考虑树上建主席树来优化建图,不错,好像可以了,然而子树信息不可减(维护的是权值为x的点的标号)gg这时候我们要用到一种黑科技:dsu on tree! 也就是树上启发式合并。更多参考资料:portal大概就是划分轻重链,然后轻边暴力,这样复杂度就科学了! 具体说下:每个点的线

2018-04-26 21:50:17 322

原创 bzoj4383 [POI2015]Pustynia(线段树优化建图+拓扑序dp)

首先我们有朴素的想法,直接建图拓扑序,倒着dp求每个点的最小值即可。 然而这样建边可能是O(n2)O(n^2)的 我们考虑对于一条信息,我们新建一个节点p,大于的点我们向p连一条边权为1的边,小于的点p向它连一条边权为0的边。这样就好多了,然而最坏还是O(n2)O(n^2)的囧我们考虑k个大于的点把一个区间分成了至多k+1个区间,这k+1个连续的区间我们可以用线段树优化到O(logn)O(log

2018-04-26 17:46:53 264

原创 bzoj3991 [SDOI2015]寻宝游戏(虚树+set)

动态删减关键点,我们发现答案就是虚树的边长和*2. 而虚树的边长和二倍正好就是把所有关键点按dfs序排序后相邻两点间的距离和。(包括最后一个和第一个的距离和)因此我们用set维护一下即可。

2018-04-25 23:22:07 265

原创 bzoj3611 [Heoi2014]大工程(虚树+lca+树形dp)

关键还是在于K个点两两之间的lca最多只有k-1个。 因此我们可以建出虚树,然后一遍dp求出所有答案。 复杂度O(K)O(K)

2018-04-25 22:10:35 198

zjoi2015.zip

浙江省选 2015 zjoi 数据 题目zjoi2015.zip 2015浙江省省赛数据。

2018-02-23

国家集训队2004论文集

国家集训队 论文集 2004 OI。

2017-08-05

2013国家集训队清华集训

2013国家集训队清华集训资料。

2017-07-30

空空如也

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

TA关注的人

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