自定义博客皮肤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的博客

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

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

原创 hdu4010 Query on The Trees(lct)

1.连边x,y 2.以x为根,删边y,fa[y] 3.路径加法 4.路径最大值。

2018-01-31 18:26:13 333

原创 bzoj3669 [Noi2014]魔法森林(并查集+lct)

把所有边按a值从小到大排序。不断往里加边,维护连通性,如果成环,查询目前x,y路径上的b的最大值,如果我当前边的b比最大值还大,则肯定不往里加。否则替换掉最大的b值那条边,连通性不变。如果1和n已经联通,就更新答案,用目前1,n路径上的b的最大值+当前边的a值来更新。这样为什么是正确的呢?考虑你这次替换了一条边进去,分两种情况 1.这条边在目前1~n的路径上,则显然这条边的a值是最大的a值。

2018-01-31 18:13:47 476

原创 bzoj1180 [CROATIAN2009]OTOCI(lct)

因为没有删边操作,可以直接拿并查集维护连通性。为啥不能直接带权并查集呢?因为还有修改点权。#include #include #include using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 30010inline int read(){ int x=0,f=1;char ch

2018-01-31 17:14:55 346

原创 bzoj2049 [Sdoi2008]Cave 洞穴勘测(lct)

只有link和cut的裸题。

2018-01-31 16:40:31 232

原创 bzoj3282&&luogu3690【模板】Link Cut Tree (动态树)

觉得这篇blog讲得不错:传送门 模板题。lct,动态树,树的形态可以变化的树链剖分,用splay来维护每条重链上的信息。#include #include #include using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 300010inline int read(){

2018-01-31 16:12:00 358

原创 bzoj2329 [HNOI2011]括号修复(splay)

首先我们发现对于一个括号序列,可以先贪心地把能配对的都消掉,剩下的括号一定是)))(((这样的,我们记作(a,b),则不难发现,答案就是(a+1)/2+(b+1)/2.因此我们只需维护括号序列(a,b)。可以像捉迷藏那题一样的维护。但是我们发现翻转或反转后,括号序列完全不一样了x。怎么办呢。于是我们再维护一个完全反着的括号序列(a2,b2)。我们发现翻转其实就是反转操作之后从右往左看的结果。于是乎就

2018-01-31 14:45:43 301

原创 bzoj3831 [Poi2014]Little Bird(单调队列优化dp)

f[i]表示跳到i的最小体力。则容易得到转移方程: f[i]=min{f[j]+(a[j]<=a[i])|i−k<=j<i}f[i]=min\{f[j]+(a[j]<=a[i]) |i-k<=j<i\} 由于有(a[j]<=a[i])的存在,看似不能单调队列优化了,其实无妨。。。因为最多只加一。所以在维护单调队列的时候注意如果dp值相等就以a值较大为优即可。

2018-01-30 22:40:59 331

原创 bzoj1014 [JSOI2008]火星人prefix(二分答案+哈希+平衡树)

我每次询问,用二分答案+hash去求lcp。 splay维护一下插入和修改。点p的hash值就是 hs[l]∗(sz[r]+1)+hs[p]∗sz[r]+hs[r]hs[l]*(sz[r]+1)+hs[p]*sz[r]+hs[r]

2018-01-30 18:19:04 386

原创 bzoj2073 [POI2004]PRZ(状压dp)

dp[s]表示S状态的人都干掉的最小时间,枚举子集来转移,复杂度O(n3)O(n^3)

2018-01-30 17:13:35 333

原创 bzoj1895 Pku3580 supermemo(splay)

就revolve操作比较特殊。这里对序列的revolve相当于循环移位,向右移。我们可以先算出循环移位之后新的第一个数原来的位置pos。 比如对于rotate(1,n,t),我们算出pos,然后翻转(1,pos-1)(pos,n)(1,n)即可。自己举举例子就看出来了。

2018-01-30 16:31:47 310

原创 bzoj1076 [SCOI2008]奖励关(期望dp+状压dp)

期望dp就要倒着做。。。 dp[i][S],表示前i-1轮过后,目前的宝物获得状态是S,在i~k轮能获得的最大期望。那么答案就是dp[1][0]。

2018-01-30 14:34:08 345

原创 bzoj4864 [BeiJing 2017 Wc]神秘物质(splay)

区间极值最大值一定是最大值-最小值,区间极值最小值一定是相邻两个数的差,因此我们还要维护区间最右和最左是几。

2018-01-30 14:05:46 326

原创 bzoj3434 [Wc2014]时空穿梭(莫比乌斯函数+多项式乘法)

蒟蒻我第一步共线就没想出来x暴力dp T飞。直接爆零qaq 我们记C个点分别为CiC_i,V为{v1,v2...vn}\{v_1,v_2...v_n\},令Bi=Ci−Ci−1B_i=C_i-C_{i-1}。则我们发现Bi=(ti−ti−1)VB_i=(t_i-t_{i-1})V,也就是说每一个B的各维坐标都是成比例的。我们设第i维的坐标极差为Δxi\Delta x_i(Cn−C1C_n-C_1)

2018-01-29 17:53:02 481

原创 bzoj4405 [wc2016]挑战NPC(一般图最大匹配)

我们把每一个筐子拆成三个,互相连边,得到一个三元环。x向y拆成的三个点连边。我们不难发现,每一个匹配都对应了一种分配方法。如果一个筐子至多放了1个球,则它的三元环中自己还有且仅有一对匹配。所以半空的筐子数=最大匹配-n 然后是个一般图,要用带花树来求最大匹配,模板见uoj79

2018-01-27 20:46:06 302

原创 uoj79 一般图最大匹配(带花树)

写着感觉好麻烦呀。。。心力交瘁。。。大概就是缩花,花套花想想就迷。。。推荐几个学习的好地方: http://www.csie.ntnu.edu.tw/~u91029/Matching.html 2015 年中国国家队候选队员论文集,陈胤伯,《浅谈图的匹配算法及其应用》

2018-01-27 18:07:08 475

原创 USACO2018JAN Gold

A.mootube(离线+并查集) 给定一棵n个点的树(n=1e5),有边权,两点间距离定义为两点路径上的边权最小值。m个询问(m=1e5),k,v,询问对于点v,距离>=k的点有多少个(不含v)离线+并查集,按k从大到小做,此时与v连通的所有点均为答案。 我已经菜到想不出这种题了qaqB.lifeguards(树+贪心) 给定一棵有根树,wrx一开始在根,每个叶子节点都是出口,你可以在每个出

2018-01-27 00:26:22 1130

原创 hdu4547 CD操作(lca+map)

就是求lca。。。要注意如果A=B的话是需要0步。字符串映射可以采用map。

2018-01-26 21:09:43 343

原创 bzoj1251 序列终结者(splay)

区间加,区间翻转,区间最大值。splay直接上。

2018-01-25 23:10:14 276

原创 bzoj1097 [POI2007]旅游景点atr(spfa+状压dp)

首先spfa预处理一下K个点以及起终点之间的最小距离。 然后比较显然的状压dp。f[S][i]表示走过了状态为S的点,现在在i的最短路。枚举一个j去转移,判断一下合法就好了。复杂度看上去是O(km+2kk2)O(km+2^kk^2)的。

2018-01-25 22:43:56 316

原创 bzoj3506 [Cqoi2014]排序机械臂(同bzoj1552)

bzoj3506 [Cqoi2014]排序机械臂(同bzoj1552)

2018-01-25 16:05:25 298

原创 bzoj1552 [Cerc2007]robotic sort(splay)

题目中的编号排完序其实就没嘛用了。。。主要就是一个区间翻转的操作。但是要找到数x的位置,把它转到根,就要提前把根到x的路径上的点都下放了,把x先做对,才能去转。

2018-01-25 16:03:29 276

原创 bzoj2626 JZPFAR(求K远点)

类似bzoj3053,求第K远点。打打板子,找找手感。 学习了一下priority_queue如果想自定义小根堆,要重载大于号。

2018-01-24 21:57:09 787

原创 bzoj2463 [中山市选2009]谁能赢呢?(博弈论)

如果n为偶数,一定存在棋盘完美覆盖(用1*2的多米诺骨牌恰好覆盖棋盘)。则容易发现,每次先手都是下在多米多骨牌的后一部分,所以先手必胜。如果n是奇数的话,除去左上角的1个格子,剩下的棋盘是存在完美覆盖的,容易发现,先手每次都是下在多米诺骨牌的前一部分,因此必败。

2018-01-24 20:01:11 308

原创 USACO 2018JAN Silver

A.lifeguards(线段树+枚举) 枚举删掉哪条线段,离散化+线段树维护线段覆盖长度qaq B.rental(贪心+二分+枚举) 枚举留几头牛,贪心算收益qaq C.mootube(并查集+暴力) 类似最大生成树的并查集+暴力处理出dis,然后暴力回答询问qaq

2018-01-21 22:27:18 1489

原创 bzoj1770 [Usaco2009 Nov]lights 燈(高斯消元解异或方程组+枚举自由元)

首先我们发现每个开关要不嗯1次,要不摁0次,没必要摁多次。于是对于每个点i,我们就得到了这样一个方程组: a[i][1]*x[1]^a[i][2]*x[2]^…^a[i][n]*x[n]=1. 其中a[i][j]表示i,j是否有边,如果有就是1,否则是0.x[i]表示是否嗯开关i。然后我们用高斯消元解这个方程组,可以用bitset优化。然后爆搜枚举自由元,取最优解。

2018-01-20 22:01:24 987

原创 luogu1361 小M的作物(最小割)

类似bzoj3894,S向每个点建边,容量为种在A的收益,每个点向T建边,容量为种在B的收益,对于每一个点,我们必然要割掉连向S或T的一条且仅一条边。对于割之后的图,S集的点均选择了种在A,T集的点均选择了种在B。那对于共同种在A地有额外收益的点怎么办呢?,我们新建一个点x,S向x连边,容量为收益,x向所有需要共同种在A的点连边,容量为inf,则如果这些点有一个点没有割掉向T的连边,我们势必要割掉收

2018-01-19 15:59:57 464

原创 bzoj1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树/动态点分治+堆)

括号序列做法真是神神神呀qaq直接去看岛娘的博客吧:传送门。 或者直接去看noi2008国家集训队论文《数据结构的提炼与压缩》 by cqx1.20upd:终于看懂了点分治+堆的方法…orz hzwer 准确理解每个堆的意义很关键… C[x] 维护的是x所控制的子树中每个点到x在重心树中的父亲的距离 B[x] 维护的是x所控制的子树中以x的每个儿子为根的子树到x的最大距离,即在重心树中x的每

2018-01-19 09:44:39 468

原创 bzoj3672 [Noi2014]购票(dp+斜率优化+点分治+cdq分治)

首先考虑如果是序列怎么做,比较明显的dp,dp[i]表示i走到1的最少花费,则 dp[i]=min{dp[j]+(dis[i]−dis[j])∗p[i]+q[i]|j<i,dis[i]−dis[j]<=li[i]}dp[i]=min\{dp[j]+(dis[i]-dis[j])*p[i]+q[i] |j<i,dis[i]-dis[j]<=li[i]\} 我们自然想到斜率优化,我就不推式子了qaq

2018-01-18 13:40:52 371

原创 bzoj3219 巡游(二分答案+点分治+单调队列)

求中位数最大的路径。我们二分答案,把>=mid的边都变成1,< mid的边都变成-1,如果有一条路径的权值和≥0,则中位数可以为mid。所以我们就是要去找一条权值和最大的路径。具体做法与bzoj1758相同。 我把leoly慢了8s啊,orz

2018-01-18 09:08:31 392

原创 bzoj1758 [Wc2010]重建计划(二分答案+点分治+单调栈)

首先求一个最优比率的东西,我们二分答案,转化成判定是否存在一条合法路径使得边权和≥0.然后这个东西我们点分治去做。每次计算过x的合法路径的最大值时,为了避免不合法,我们一个子树一个子树的做。我们处理出g[i],表示目前这棵子树深度为i的点的最大距离,tmp[i]表示之前做过的子树深度为i的点的最大距离。我们每次用g[i]去询问tmp,也就是要在tmp[l-i,r-i]中选一个最大值,我们发现这就是一

2018-01-17 22:38:47 809

原创 bzoj3697 采药人的路径(点分治+dp)

把边权0变成-1,路径边权和为0就是阴阳平衡了。我们点分治,考虑一条过根的路径,被根分成两部分,如果是合法的,那么休息站不是在前半段,就是在后半段。我们记g[i][0]表示到根的边权和为i,且不存在休息站的路径数;g[i][1]表示存在休息站的路径数。一个一个子树的做,避免不合法的情况。用tmp[i][0/1]表示已经做过的子树的信息。则对答案的贡献就是 g[0][0]∗tmp[0][0]+∑i=

2018-01-17 14:29:24 547

原创 bzoj2599 [IOI2011]Race(点分治)

求边权和为K,且边数最少的路径。我们点分治就好了,不过据说这题卡时。。。所以我们需要一些小trick。比如说不容斥,提前记录bel,用来保证只更新合法情况。类似之前的做法,我们可以O(n)扫来更新答案,然后因为相等时我们要找最优的答案,比较麻烦。。。复杂度可能也就退化了。我们排序时如果dis相等,要把dep小的排在后面,这样我们从后往前扫遇到的第一个合法的就是最优得了。其实应该用类似dp的方法来维...

2018-01-17 09:55:47 437

原创 CIA11 毒瘤题(七维偏序,分块+bitset)

首先bitset很强呀x,我们针对每一维,对于每一个点预处理出比他小的集合。然后他的答案就是这k个集合的交。但是O(n^2k)的空间很gg。我们可以分块,对于每一维,只预处理出若干块集合,然后查询的时候找到离他最近的块,用这个块的答案暴力得出正确的集合。应该是O(nn−√+n2∗7/32)O(n\sqrt n+n^2*7/32)

2018-01-16 23:21:51 1167

原创 bzoj2152 聪聪可可(点分治/树形dp)

就是求路径和%3余0的有序点对个数。可以点分治。还可以树形dp。 dp[i][j]表示以i为根的子树中的点,到i的路径长度%3余j的个数。每次统计一下过i的答案就好了。点分治

2018-01-16 21:42:27 339

原创 bzoj1414 [ZJOI2009]对称的正方形(二分答案+二维哈希)

首先我们考虑偶数个点和奇数个点的方阵枚举中心方式不太相同,我们用类似manacher的处理方法,填上一堆0,把他们全都变成奇数的情况。然后我们枚举每一个点作为中心,二分答案找到以这个点为中心最大的合法方阵。就可以直接统计这个点对答案的贡献了。这样已经是O(n2logn)O(n^2logn)的了,我们需要O(1)判断一个方阵是否上下左右均对称。类似不用manacher求最长回文子串的方法,把这个子串镜

2018-01-16 17:16:56 549

原创 poj1740 A New Stone Game(博弈论)

结论:偶数堆,相同数量的堆有偶数个,可以模拟操作的是必败局面。只有初始局面就必败,才先手必败,否则必胜。具体证明见dalao Visjiao博客:传送门#include #include #include using namespace std;#define ll long long#define N 110#define inf 0x3f3f3f3finline int re

2018-01-16 14:35:42 289

原创 bzoj1468 Tree(点分治)

点分治,就是每次找到目前子树的重心,把它当做根,处理所有过重心的路径信息,然后递归处理子树。 什么是一棵树的重心呢?选出的一个点,使分出的子树中节点数最大的子树最小,就是重心。这样分出的子树点数不超过n/2+1,就可以保证复杂度了。怎么找重心呢?我们就按定义来找,每次O(n)。然后每次递归时处理过根的合法点对。怎么做呢?我们容斥一下,变成给定一个数组,问有几个有序对满足和<=K。我们可以排序+线

2018-01-16 10:49:33 306

原创 bzoj3295 [Cqoi2011]动态逆序对(cdq分治+树状数组)

我们把删除操作倒着考虑,变成逐渐加数,每个数按加入的顺序给时间标号tit_i。(没被删过的数随便按顺序给时间标号1…n-m),每个点我们记录三个信息(ti,xi,yi)(t_i,x_i,y_i)分别表示时间标号,位置,数值,每一个点又都是一个询问,答案是加入这个点后增加的逆序对数。那么对于一个询问(t,x,y),他的答案就是满足 ti< t&&xi< x&&yi>y或者ti< t&&xi>x &&

2018-01-15 22:13:08 370

原创 bzoj2961 共点圆(cdq分治维护凸包,计算几何)

这题真是写的我有点绝望。菜不禁声。其实一开始是想拿KD tree树写的,听说能过,但是wa成狗??至今改不对gg。一个点(x0,y0)在圆(x,y)内,要求 (x−x0)2+(y−y0)2<=x2+y2(x-x_0)^2+(y-y_0)^2<=x^2+y^2 化简一下就是 x20+y20<=2x0x+2y0yx_0^2+y_0^2<=2x_0x+2y_0y 假设y0>0y_0>0,我们有y>

2018-01-15 10:30:14 890 1

原创 bzoj1176 [Balkan2007]Mokia(cdq分治+树状数组)

S据说一直都是0.。。好像是描述有误。。可以直接忽视了。 把每一个询问矩形容斥成4个,使得都是前缀矩形,然后cdq分治就好啦。注意树状数组不能每次O(N)大规模清空,这样复杂度其实是不对的。必须是O((mid-l+1)*logn)的清空。原来我以前写的都是假的orz

2018-01-14 15:57:53 299

zjoi2015.zip

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

2018-02-23

国家集训队2004论文集

国家集训队 论文集 2004 OI。

2017-08-05

2013国家集训队清华集训

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

2017-07-30

空空如也

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

TA关注的人

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