自定义博客皮肤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)
  • 收藏
  • 关注

原创 bzoj2435 [Noi2011]道路修建(树)

小水题~#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 1000010inline char gc(){ static char buf[1<<16],*S,*T; if(S==T){T=(S=buf)...

2018-06-16 22:46:59 190

原创 bzoj4321 queue2(dp)

f[i][j][0],考虑1~i的排列,有j个相邻的差1,i和i-1不相邻的方案数。 考虑j插到哪里去来转移。 复杂度O(n2)O(n2)O(n^2)#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 1010#define mo...

2018-06-16 22:33:49 172

原创 bzoj4765 普通计算姬(分块+树状数组)

分块大法好啊qaq 我们按编号分块,预处理出f[x][i]表示改动x节点对第i块的影响有几个点 然后dfs序+BIT维护一下子树和。 复杂度O(m(n−−√+logn+n−−√logn))O(m(n+logn+nlogn))O(m(\sqrt n+log n+\sqrt n logn))#include <bits/stdc++.h>using namespace std;...

2018-06-16 21:52:55 266

原创 bzoj3679 数字之积(数位dp+Hash表)

其实有效状态并不多,于是我们拿一个hash表记一下,直接数位dp即可。#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 10003inline char gc(){ static char buf[1<<16],...

2018-06-16 20:51:55 351

原创 bzoj3123 [Sdoi2013]森林(树上主席树+启发式合并)

求路径k小值,树上主席树即可。 还有合并两棵树的操作,我们可以启发式合并。 复杂度O(nlog2n)O(nlog2n)O(nlog^2n)这题真是充分体现了我的zz 一开始 洛谷 T,发现离散化以后就过了luogu 然后bzoj T ,怪罪于垃圾回收,删了果然过了 然而突然发现,我的启发式合并是假的x 我用的sz可能不是整块的… 倒是经过一波常数优化跑进了前五qaq#inclu...

2018-06-16 17:43:37 372 1

原创 bzoj4826 [Hnoi2017]影魔(单调栈+主席树)

我们先单调栈求出每一个数左边/右边第一个大于他的数的位置L,R 那么以a[i]为最大数的贡献是: 左端点L[i],右端点R[i],贡献p1 左端点L[i]+1~i-1,右端点R[i],贡献p2 左端点L[i],右端点i+1~R[i]-1,贡献p2 我们如果把左右端点当做坐标的话,投射到二维平面上,那么我们每次求的就是一个矩形和。有一些单点加,某一维上的线段加。因此可以直接用主席树解决O(...

2018-06-16 16:19:26 286

原创 bzoj3624 [Apio2008]免费道路(图论+并查集)

我们首先把必须加入的0边加进去(把所有1边全加进去,然后此时还能加进去的0边就是必须加的0边) 如果必须加的0边个数>K则无解。否则继续加0边直到K条。 如果加不到K条也无解。然后再加1边,能加就加进去即可。 不连通也是无解。 解决。#include <bits/stdc++.h>using namespace std;#define ll long long#...

2018-06-16 14:00:39 155

原创 bzoj3594 [Scoi2014]方伯伯的玉米田(贪心+dp+二维BIT)

首先我们贪心地有每次区间操作一定是对一个后缀。 于是我们有f[x][j]表示结尾数字为x,已经进行了最多j个操作的最长不降子序列长度。二维BIT优化一下来转移即可。 复杂度O(nklog2w)O(nklog2w)O(nklog^2w)#include <bits/stdc++.h>using namespace std;#define ll long long#defin...

2018-06-15 22:28:32 178

原创 bzoj5305 [Haoi2018]苹果树(组合数学)

首先n个点的这样生成的二叉树有n!种。 因此这就不再是一个期望问题,而是计数问题! 可能没逆元,烦躁qaq 考虑给每个点按生成顺序标号,我们来计算i->fa[i]这条边对答案的贡献。 我们枚举i的子树大小j,那么这条边就会被经过j*(n-j)次。 再考虑i子树内部形态数和外部形态数。 i子树内部形态数显然是j!∗Cj−1n−ij!∗Cn−ij−1j!*C_{n-i}^{j-1}。...

2018-06-15 21:09:07 642

原创 bzoj2830/luogu3830 随机树(期望与概率dp)

首先第一问,我们设f[i]f[i]f[i]表示i个叶子的树的叶子平均深度的期望 那么有转移f[i]=f[i−1]∗(i−1)−f[i−1]+(f[i−1]+1)∗2if[i]=f[i−1]∗(i−1)−f[i−1]+(f[i−1]+1)∗2if[i]=\frac{f[i-1]*(i-1)-f[i-1]+(f[i-1]+1)*2}{i} 即f[i]=f[i−1]+2/if[i]=f[i−1]+2...

2018-06-15 16:19:57 344

原创 bzoj2164 采矿(树形背包dp+线段树优化+链剖)

首先我们如果能预处理出dp[x][j]表示x子树内分配j个人最大获益,然后每次询问O(m)的循环一下,还需要知道在链上某一个点分配m-j个人的最大获益,我们发现这个东西可以放在线段树上树剖来维护。但是有修改的话我们预处理的那个dp数组就gg了,怎么办呢qaq 我们发现其实这个dp数组也可以直接在线段树上维护!每次线段树信息合并时背包dp合并一下即可,复杂度O(m2)O(m2)O(m^2) 因此总...

2018-06-15 10:45:20 405

原创 bzoj2141 排队(树套树)

求动态逆序对,BIT套权值线段树即可。 空间和时间都是O((n+m)log2n)O((n+m)log2n)O((n+m)log^2n)的最近怎么老是算错空间qaq#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 20010in...

2018-06-15 09:21:01 190

原创 bzoj3717 [PA2014]Pakowanie(状压dp+贪心)

贪心的把背包按容量从大到小排序,状压24个物品,S的物品放进去了需要最少几个背包f[S],以及此时最后一个背包的最大剩余容量g[S]。 复杂度O(n2n)O(n2n)O(n2^n)#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3finline char...

2018-06-15 08:37:57 220

原创 bzoj4605 崂山白花蛇草水(动态开点线段树逃替罪羊重构K-D tree)

首先我们发现它是一个三维的问题而且还强制在线 囧 我们可以考虑在外面来一个权值线段树,然后每次查询时在线段树二分即可,这样我们每个节点再套一棵K-D tree,用来查询有多少个点被框住了,然后因为是不断往里插点,所以还要替罪羊式重构维护一下K-D tree。 最后复杂度就是O(qlogwn−−√)O(qlogwn)O(qlogw\sqrt n)#include <bits/stdc+...

2018-06-14 22:37:24 232

原创 bzoj4604 The kth maximum number(动态开点线段树逃替罪羊重构K-D tree)

是bzoj4605的弱化版。 可以离线,数据范围小一些,因此可以整体二分套cdq。 或者直接双倍经验(逃#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 500010#define alpha 0.77inline char ...

2018-06-14 22:31:24 243

原创 luoguT30208 太极剑(贪心)

某题的弱化版… 我觉得是挺神的,考场上只想出了线性规划然而不会写了x 首先我们有一个结论:我们可以把切割线分配到点上去,这样只要一条线段两边的点的权值和分别大于等于线段权值即可。 然后所有点的权值和+1/2就是答案下界,并可以证明这个下界是可以达到的。 因此问题转化成分配点权,使得总权值最小。 然后此题权值都是1,每两个同色点之间都要有一个切割点,可以贪心地让每两个相邻的切割点之间没有同...

2018-06-14 15:33:09 322

原创 CF414E Mashmokh's Designed Problem(ETT+二分)

ETT维护欧拉序。每个点维护它的深度,出点入点基本无异。 第一个操作求个lca就好了qaq,x,y的lca就是(in[x],out[y])中深度最小的点的父亲。 第二个操作,x的kth祖先,就是[1,in[x]]中最靠右的深度为dep[x]-k的点。 第三个操作,我们注意到欧拉序上一段连续的区间的深度是连续的,于是我们可以维护每个区间的深度最小/最大值,然后二分来找到深度k的最后一个出现位置...

2018-06-14 12:18:54 448

原创 bzoj3786 星系探索(ETT)

ETT就是Euler Tour Tree,用平衡树来维护欧拉序。 而欧拉序可以写成很多形式: 1.The first way is to write down all edges of the tree, directed, in order of DFS. This is how ETT is defined on 2.The second way is to store vertices...

2018-06-14 10:05:35 401

原创 bzoj3007 拯救小云公主(二分答案+并查集)

二分答案以后就是不能经过若干圆,能否从(1,1)走到(n,m) 只要(1,m),(n,1)不连通即可。 并查集维护一波即可。 复杂度O(n2logw)O(n2logw)O(n^2logw)#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long long#defi...

2018-06-13 23:05:39 613

原创 bzoj3630 [JLOI2014]镜面通道(计算几何+最小割)

首先你要知道这样一个物理学结论:【水能流过的地方,光也能经过】 于是乎只要左右连通就可以了。 对偶一下,就是只要上下界不要连通就可以了。 于是建图最小割,把每个点拆点,i->i+n,1 如果与上界有交就连边S->i,inf 如果与下界有交就连边i+n->T,inf 如果i,j相交了就互相连边。 然后此题毒瘤的地方就在于各种判交… 你需要耐心… 数据比较友好,没有...

2018-06-13 22:39:04 208

原创 bzoj4557 [JLoi2016]侦察守卫(树形dp)

这个树形dp没想出来…好菜orz 首先考虑如果覆盖了一个点x,那么对于他的一个儿子y来说,它的子树内的前D-1层可以不用覆盖了,只需覆盖剩余点即可。 因此我们考虑设计状态f[x][j],表示x子树外面的点已经帮着覆盖了前j层,覆盖子树内剩余必须点的最小花费。(x为第一层) 转移也很明显:f[x][j]+=f[y][j−1]f[x][j]+=f[y][j−1]f[x][j]+=f[y][j-1...

2018-06-13 21:09:06 217

原创 bzoj2310 ParkII(插头dp)

类似bzoj1187 这回要求一条简单路的最大权值和。 简单路与简单回路的区别就在于,我们可以有独立插头。 于是多一维状态表示独立插头即可。 转移时多讨论一些情况就好了qaq 此时p=1,q=2的插头不管其实也是可以的,因为一条简单回路一定也能视作一条简单路,在其他情况被讨论到。 注意到我们这样无法考虑到只有一个点的简单路,于是乎单独处理掉。 复杂度O(nm4mm)O(nm4mm)O...

2018-06-13 18:51:36 289

原创 bzoj1187 [HNOI2007]神奇游乐园(插头dp)

在一个n*m的棋盘上,每个格子有权值,让你找一条简单回路使得经过的格子权值和最大。n<=100,m<=6 插头dp经典题目。复杂度O(nm3mm)O(nm3mm)O(nm3^mm)#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long long#defi...

2018-06-13 16:27:09 307

原创 ural1519 Formula 1(插头dp)

一个n*m的棋盘,有些格子是障碍,问存在多少条哈密顿回路。(n,m<=12) 基于连通性的状态压缩动态规划。cdq论文。 这题逐格递推,括号表示法,滚动数组+Hash表优化空间。 复杂度O(S∗n)O(S∗n)O(S*n) 2017.5.21第一次写这道题。 2018.6.13把这题整理到blog上。 这一年来,水平究竟有没有长进呢… 当时就能写出Hash表+括号表示法的插头d...

2018-06-13 15:22:37 266

原创 bzoj1327/poj2286 The Rotation Game(IDA*)

迭代加深A*搜索qaq 就是每次设一个目标深度,把当前局面在最理想状况下还需多少步当做估价函数。如果当前深度+估价函数>目标深度则剪枝。#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long longinline char gc(){ static c...

2018-06-13 13:27:37 183

原创 bzoj3258 秘密任务(Dij+最小割+tarjan)

首先跑两边Dijkstra,只留下一定存在在最短路上的边。 然后把一条边拆成两条边,权值分别为起终点的权值。 现在我们就是要花最小的代价把1,n割开,于是求一个最小割。 还要判定最小割是否唯一。可以对残余网络tarjan缩点。 如果一条边是割边,那么需要满足: 1、满流边 2、bel[x]!=bel[y] 如果还满足bel[x]==bel[s]&&bel[y]==be...

2018-06-13 12:27:38 324

原创 bzoj4871 [Shoi2017]摧毁“树状图”(树形dp)

求用两条边不相交路径最多可以把一棵树分成几个连通块。 细节繁多的树形dp囧 orz ltx 这个人有图呢!portal大概就是讨论一下不同的链形态怎么转移qaq#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long long#define inf 0x3f3f...

2018-06-12 23:48:37 310

原创 bzoj4872 [Shoi2017]分手是祝愿(贪心+期望dp)

首先考虑k=n的话最优解是怎样的。 因为拉一盏灯只会影响到比它标号小的灯和自己。 所以我们按标号从大到小考虑。如果一盏灯还亮着就必须拉,并且把影响到的灯改变。这样就可以得到目前状态的最小操作次数了。 设f[i]表示剩余最小操作次数为i时还期望操作多少步,可以列出方程: f[i]=in∗f[i−1]+n−in∗f[i+1]+1f[i]=in∗f[i−1]+n−in∗f[i+1]+1f[i]=...

2018-06-12 20:29:26 200

原创 bzoj4035 [HAOI2015]数组游戏(博弈论sg函数+分块)

出题人kzf告诉我们,可以修改一下游戏的定义:每一步可以选择黑格子或白格子,最终能将所有格子都翻成黑色的人赢。由于每次翻转黑格子的操作都不可能直接带来胜利,而任何一步选取黑格子进行的有利操作都能由对方通过再翻一次这个格子抵消掉,根据假设“两个人都是足够聪明的”,我们知道游戏中一定不会有人选择黑格子。这就保证了这种转换的正确性。 因此我们可以把每个黑色的位置都看成偶数个白格子叠加起来得到...

2018-06-12 17:26:28 417

原创 bzoj4036 [HAOI2015]按位或(概率与期望+fmt)

vfk的论文题。具体可以参见国家集训队2015论文集 吕凯风的《集合幂级数的性质与应用及其快速算法》 这题就是求集合并卷积,用快速莫比乌斯变换即可。 答案就是∑k=1ook∗(pk[U]−pk−1[U])∑k=1ook∗(pk[U]−pk−1[U])\sum\limits_{k=1}^{oo}k*(p^k[U]-p^{k-1}[U]) 莫比乌斯变换之后,化简一下,就得到了一个等比数列,因为∑...

2018-06-12 15:08:24 375

原创 bzoj4037 [HAOI2015]数字串拆分(矩阵快速幂+dp)

对于计算f[n],我们显然可以构造出m*m的转移矩阵A来矩阵快速幂求。 然后我们考虑最后的答案,如果是分成了k个数:a1,a2,…,ak。 那么结果就是Aa1+a2+...+ak=Aa1∗Aa2∗...∗AakAa1+a2+...+ak=Aa1∗Aa2∗...∗AakA^{a_1+a_2+...+a_k}=A^{a_1}*A^{a_2}*...*A^{a_k} 最后的答案就是若干个这种矩阵加...

2018-06-11 21:53:22 341

原创 bzoj4033 [HAOI2015]树上染色(树形dp)

这题确实有些意思。 考虑f[i][j]表示i子树内选了j个黑点的…什么呢? 这个状态好像不太好设计,因为只管子树内的话子树外的就没机会考虑进答案了qaq 我们考虑一条边w对答案的贡献,一定是w* (左边的白点* 右边的白点+左边的黑点 * 右边的黑点),因此我们可以设计状态为 f[i][j]表示i子树内选了j个黑点,i子树内所有边对答案的贡献的最小值。 然后就可以精细的dp了,复杂度是O(...

2018-06-11 20:53:22 305

原创 bzoj4753 [Jsoi2016]最佳团体(分数规划+树形背包)

分数规划,二分答案,变成树上依赖背包。 复杂度O(nklog1e9)O(nklog1e9)O(nklog1e9)#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 2510#define eps 1e-4inline char g...

2018-06-11 19:57:41 283

原创 bzoj5314 [Jsoi2018]潜入行动(树形背包)

dp[x][k][0/1][0/1]表示x子树内放置了恰好k个,x放没放,x有没有被监视到的方案数。 看上去O(nk2)O(nk2)O(nk^2),但是用sz精细实现的话应该是O(nk)O(nk)O(nk)的。 具体转移见代码。还是挺简单的qaq#include <bits/stdc++.h>using namespace std;#define ll long long...

2018-06-11 17:09:35 447

原创 bzoj3450 Tyvj1952 Easy(期望与概率+dp)

如果是多了一个o,就会使得答案期望增加2L+1. 变成线形的就可以期望dp了。#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 6e14#define N 500010inline char gc(){ static char buf[1<<16],...

2018-06-11 16:04:47 217

原创 bzoj5289 [Hnoi2018]排列(贪心+树+set)

首先把限制翻译一下就是考虑p这个排列,aiaia_i必须出现在i前面,连边aiaia_i->i。发现约束关系是一棵以0为根的树。(有环就无解) 现在的问题就变为,给定一棵树,每个点有点权,你要给每个点再分配一个不同的pipip_i,需要满足pi>pfa[i]pi>pfa[i]p_i>p_{fa[i]},使得∑ipiai∑ipiai\sum\limits_ip_ia_i最大。 ...

2018-06-11 15:09:41 268

原创 bzoj5290 [Hnoi2018]道路(树形dp)

妈妈终于有我会做的题了x f[x][i][j]表示x节点上面有i条公路未修,j条铁路未修的最小花费。 叶子节点直接算贡献,其他节点无非两种决策,修公路/铁路,相应的儿子状态的和取最小即可。 i+j<=40. 直接开空间开不下可以压一下。 复杂度O(n202)O(n202)O(n20^2)#include <bits/stdc++.h>using namespace...

2018-06-10 23:28:25 197

原创 bzoj5288 [Hnoi2018]游戏(模拟+拓扑排序)

我们首先考虑把没有门隔开的点缩成一个点。如果i->i+1的钥匙<=i,那么从i+1一定走不到i及其左,因此先做i+1,也就是连边i+1->i,然后按拓扑序来做,如果i->i+1的钥匙>=i+1,那么从i一定走不到i+1及其右,因此先做i,也就是连边i->i+1. 每次类似区间合并去扩展,每个区间只会被最多合并两次,因此复杂度是O(n)O(n)O(n)的...

2018-06-10 22:31:47 351

原创 bzoj2134 单选错位(概率与期望)

考虑答对第i题的概率,设第i-1题答案有a个,第i题答案有b个,那么一共有ab种可能,而答对的可能只有min(a,b)种,因此答对这一题的概率就是1/max(a,b)。每一题都相互独立,分别计算加起来就是期望。#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f...

2018-06-09 17:22:25 203

原创 bzoj5369 [Pkusc2018]最大前缀和(状压dp)

考虑对于一个序列,如果SpSpS_p是最大前缀和,那么对于p+1…n这个序列,需要满足任意前缀和均<=0.否则SpSpS_p一定不是最大前缀和。sum[s]表示s子集的点的权值和。 f[s],表示选了s的点,sum[s]为最大前缀和的方案数 g[s],表示选了s的点,所有前缀和均<=0的方案数 那么最后答案就是∑sum[s]∗f[s]∗g[s¯¯¯]∑sum[s]∗f[s]∗g...

2018-06-09 12:54:02 579

zjoi2015.zip

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

2018-02-23

国家集训队2004论文集

国家集训队 论文集 2004 OI。

2017-08-05

2013国家集训队清华集训

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

2017-07-30

空空如也

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

TA关注的人

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