自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 [BZOJ1786&&BZOJ1831]配对 dp

首先我们可以发现所有-1的地方单调不降的填是会比正着填更优的。证明的话应该是反正吧。考虑???A????B??,(?全是确定的数),首先A和B的顺序在A左边和B右边并不会增加逆序对数,中间的数如果var n,k,i,j,num,ans:longint; a,pl,c:array[0..10010]of longint; f,lar,lit,min:array[0..10010,0..11

2017-04-29 07:47:40 297

原创 [BZOJ1179][APIO2009] ATM 强连通分量

tarjan求强连通分量后缩点,缩点后点权为原来的点之和,是否为酒吧为原来的点的或。然后做点权最长路的spfa,为酒吧的点中的最大值即为答案。 代码:type edge=^edgenode; edgenode=record t:longint; next:edge; end;var n,m,i,x,y,z,s,p,num,time,top,ans:longint;

2017-04-28 17:01:54 1125

原创 [BZOZ1064][NOI2008]假面舞会 图论

看来从简单入手到复杂情况的思想还没有形成。。。 这题就需要分情况讨论的,显然每个弱联通块是可以单独拿出来讨论的。 一棵树?最大为树深,最小为3(如果树有那么深的话) 一个环?最大为环上点数,最小为环上点数的最小约数(>=3) 一个弱联通意义下的环?我们可以发现一个性质,如果一个点所练的两条边方向相反,那么这两条边是可以抵消掉的,就变成原来的环啦。 于是我们就有思路了,把有向图转化为无向图,

2017-04-28 09:25:58 524

原创 [BZOJ2502]清理雪道 有上下界的最小流

今天刚学的上下界网络流,概念都还不是很熟。。。 题意立即可以转化成每条边流量下界为1,上界为inf,s向每个点连边,每个点向t连边,下界都为0,上界都为inf,求最小流量。 于是建立超级源和超级汇,按套路先求出一个可行流,记ans1为可行流中t->s这条边的流量。然后删除t->s,再跑一个t到s的最大流(退一些流使总流量变小),记ans2为这次最大流的流量,答案即为ans1-ans2。 要注意

2017-04-27 11:52:01 303

原创 [BZOJ1791][IOI2008] Island 基环外向树+DP

题中说每个点连出一条边,所以图应该是很多个基环+外向树。 对于每一个联通块,一条最长路径可能在某一棵子树中,也可能两棵子树各一部分加上中间一段环的路径。所以先找出它的环,对每棵树先进行树型DP,记到根最长距离为g[i]。然后把环展开(1-2-3的环展开成1-2-3-1-2),维护一个距离前缀和dis[i],这就是一个决策区间单调移动的DP了,方程为f[i]=max{g[j]-dis[j]}+dis

2017-04-27 08:04:21 787

原创 [BZOJ1455]罗马游戏 左偏树+并查集

左偏树用来合并堆,并查集用来维护所在堆的堆顶编号。 然而有的时候要删除堆顶x,然后对并查集进行这样的操作:fa[x]:=merge(x^.l,x^.r); fa[fa[x]]:=fa[x]。这样就给并查集换了个根。 注意被杀了的点不要真正扔出堆,要不然会影响并查集的getfa,打一个kill标记不管它就是了。 代码:type heap=^heapnode; heapnode=recor

2017-04-27 07:48:50 335

原创 [BZOJ1492][NOI2007]货币兑换 斜率优化DP+splay维护凸壳

写着题写的想死。。。来扯扯写着题的过程。。。(我菜啊) 早晨总结了一下昨天写的几道决策单调性和斜率优化dp,然后突然看到这题,准备来写,此时8:30。 看了popoQQQ的题解,感觉这题代码有点难度,不过还是要挑战一下的,然后大概理了理思路和细节,就开始码了,此时9:00。 10:40码完,调了几个splayRE的地方,11:00过了样例(样例很水啊),交一发,TLE(后来分析应该是死循环了)

2017-04-26 17:19:40 727

原创 [BZOJ]2561 最小生成树 最小割

为什么删除最少的边判连通连最小割都没想到。。。估计是废了。。。 考虑Kruskal的过程(最小生成树)如果有一条边(u,v),若所有比他小的边能使u,v联通,这条边就不必加入生成树中,最大生成树也同理。于是我们只要把权值比L小的调出来跑最小割,权值比L大的也挑出来跑最小割。两个加一下就是答案了。代码:type edge=^edgenode; edgenode=record t,c,

2017-04-25 09:04:15 454

原创 [BZOJ2303][APIO2011]方格染色 异或+并查集

这题首先要推式子: 题目条件即为A(i-1,j-1) xor A(i-1,j) xor A(i,j-1) xor A (i,j)=1. 又有A(i-1,j-2) xor A(i-1,j-1) xor A(i,j-2) xor A(i,j-1)=1. 相邻两列两式异或得A(i-1,j-2)xor A(i,j-2) xor A(i-1,j) xor A(i,j)=0. 就这样一直递推过去,

2017-04-25 09:02:22 634

原创 [BZOJ1030] 文本生成器 AC自动机+DP

我好菜啊。。。都是抄了std后再去理解的。。。 补集思想,先求出所有不可读的,在减去即可。 f[i,j]表示在AC自动机上走i步到达j点构成单词的方案数。首先要把所有是单词结尾的点标记出来,是不能走的,而且沿着fail树能走到单词末尾的点也是不能走的,这个在建AC自动机的时候顺便处理一下。然后可以对AC自动机做一个小处理,如果trie[i,c]=0(不存在)那么就把trie[fail[i],c]

2017-04-22 08:33:23 385

原创 [BZOJ2653]middle 主席树+二分答案

中位数的题目一定要想到二分答案然后把所有数变成1或-1什么的。。。 先离散化,这样最多只有n个值,然后对于每个值建主席树,>=的设为1,<的设为-1。按照升序建的话每次最多更改一个值,也就是logN个点。 设询问区间[ a, b] [ c, d]为然后二分答案K,现在要求的就是在主席树的第K个版本中(b,c)的和,[ a, b]的最大右子段和,[ c, d]的最大左子段和,三个东西加起来是否大

2017-04-21 09:05:13 360

原创 [BZOJ2004]公交线路 DP+矩阵快速幂

设计状态F[i , S]为最快的车到了第i个站台,所有车的状态为S,S必须满足二进制首位为1,且共有K个1。其实S只用记录以i截至的P个站台即可。 DP方程即为F[i, S]=Sigma{F[i-1, S’]} (S’转移到S合法)。 转移合法定义为:首先S’和S合法,然后S’中去掉一个1,右移一位与S相同,形象地理解成让某的一辆车开到最前方,因为每次都是向前走了一步,所以方案没有重复。这也就

2017-04-21 08:53:38 603

原创 [BZOJ1227]虔诚的墓主人 树状数组+组合数计数

首先对横纵坐标离散化,然后按纵坐标排序,一行行处理。 预处理出每一行和每一列的常青树个数numy和numx。 在操作过程中维护一个cnt[i]表示第i列有多少颗树在当前处理的行下。 对于在图中某一行且从左往右数编号为i和i+1的常青树中间的墓地,对答案的贡献是:C(i,k) *C(numy-i,k) *Sigma{C(cnt[j],k) *C(numx[j]-cnt[j],k) } (a[i]

2017-04-19 22:18:40 286

原创 [BZOJ2683&&BZOJ1176] CDQ分治&&树状数组

询问操作可以分为四个。 首先按照x为第一关键字,y为第二关键字,操作为第三关键字排序。按照时间CDQ分治,就是按照数组的顺序用time<=mid的修改更新time>mid的查询,用树状数组搞(每次树状数组要清空)。结束当前分治后要把time<=mid和>mid的放在两边继续分治,但要保证每个分治结构中x,y,opt依然是有序的。 复杂度O(n log^2 n),n<=800000。 代码:ty

2017-04-18 21:31:25 346

原创 [BZOJ4199][NOI2015]品酒大会 后缀数组

像这种“r相似”的题目是一种套路,搞出SA之后按height数组合并集合。 统计答案的时候注意细节 代码:type node=record t,id:int64; end;const maxn=300100; maxl=-1000000000;var n,i,j,p,q:longint; max,min,size:array[0..maxn]of int64;

2017-04-18 21:03:30 415

原创 [BZOJ3038&&BZOJ3211] 势能分析线段树

势能分析线段树是这样一个东西,对于某一些操作,不滋磁打标记,只能暴力更改但操作很少次以后就不会改变结果了(最常见的就是区间开根号),我们可以维护一些东西来表示这个区间是否会改变。 例子: 区间开根号,维护min和max,若min>=0且max<=1就不管。 区间整除,维护min和max,若min+1=max,直接变成区间修改或区间加(雅礼集训day1 T1)。代码:type tree=^t

2017-04-18 20:43:58 1129

原创 [雅礼4-11]游戏 SG函数&&线性基

首先要知道多个互不影响的博弈游戏组成的一个状态的SG函数等于每个子游戏的SG函数的异或和。 所以我们先考虑x点只有1颗石子的情况。我们把x连出每种颜色的边的终点异或起来得到一个数集G,所以x的后继状态就是G的异或值域,而mex{G的异或值域}显然等于2^i(i为最小的线性相关的位),于是线性基大力求一波即可。 G中的数是O(n)级别的,要bitset。(pascal狗手写bitset) 因为一

2017-04-17 22:15:59 796

原创 [雅礼4-8]老魔杖 SG函数

又是SG函数打表找规律题,设1,2,3,4分别有a, b, c, d个。当(a+c)mod 2=(b+d)mod 3时先手必败。 别问我为什么,把每个转移列出来就能证了。。。 当然我考场上发现a mod 2,b mod 3,c mod 6,d mod 2后好像不影响答案,于是就那样写的。 代码:type edge=^edgenode; edgenode=record t:lon

2017-04-17 22:00:40 566

原创 [雅礼4-7]T1 prufer序列&&dp

考场上神tm忘了可以乘逆元结果复杂度变成n^5,T了两个点。。。 说说我自己的做法吧,首先一棵树和它的prufer序列是一一对应的,而且一个度数为w的点在序列中出现了w-1次。于是我们针对prufer序列来设计状态。f[i,j,k]表示枚举到第i个点,选了其中j个点进序列,使用了k个序列空间,于是f[i, j, k]=f[i-1, j, k]+ sigma {f[i-1, j+1, k-t]* C

2017-04-17 21:50:25 426

原创 [2017雅礼集训]day10 T2 数列 最长上升子序列

可以发现最后的最长上升子序列是由原序列中从某一个点开始的最长上升子序列A和最长下降子序列B组合而成的,贡献的方案数为numA *numB。注意找到更长的以后要把原来的方案数清零。 假设最终最长长度为R,最后答案要乘上2^(N-R),因为其他元素可以任意选择放左边或右边。 求最长上升/下降子序列及方案数可以用树状数组做。经典的dp方程:F[i]=max{F[j]+1}(a[i]type nod

2017-04-17 20:42:18 836

原创 [2017雅礼集训]day4 T1 洗衣服 贪心

其实我也不知到为什么洗衣服和晒衣服是独立的。。。 既然是独立的,我们就贪心的把每件衣服最快能洗完的时刻和最快能烘干的时刻分别先预处理出来,就是贪心的往当前结束时间最早的机器里放(堆维护)。 然后两个数组一个正着一个倒着加起来取个max就可以了。 代码:type node=record dt:int64; id:longint; end;var l,n,m,i,j,si

2017-04-17 20:15:07 1402

原创 [BZOJ2844]albus就是要第一个出场 高斯消元+线性基

网上写的题解都好简略啊。。。 假设n个数一共消出了k个线性基。n个数能xor的所有数一共有2^n个(不去重),k个基能xor出的数一共有2^k个(本身就没有重复)。所以xor的值域中每个数都出现了2^(n-k)次。为什么呢? 很简单啊,消的时候是不改变xor出的所有数的,消出k个后面其实还剩下(n-k)个0啊。。。每个数都可以xor上一些0,不就是2^(n-k)个吗?! 现在我们要求比q小的有

2017-04-10 22:06:43 457

原创 [雅礼4-7]T3 最小割/乱搞

考场上打暴力智障到用力的分解来判平衡。。。 我们发现相邻两片扇叶间隔相同组成的环是能保证平衡的,题目中说最多有两个素因子,所以素环最多只有两种(非素环可以用若干个素环拼起来)。所以我们要尽可能多的选环并且不能使同一片扇叶出现在两个环中。考虑最小割:每个环看成一个点,源点向长度为p1的环连一个容量为p1的边,长度为p2的环向汇点连一个容量为p2的边;如果某个扇叶坏了,把它所在的环与源汇点的边断掉;如

2017-04-09 22:01:25 360

原创 [2017雅礼集训]day2 T2 二分图关键点&&博弈

定义度数大点比度数小的点优先级高,度数相等时编号大的点高。 枚举i点,再枚举与i相连的j点,再枚举与j相连优先级比j大的k点;ans:=ans+cnt[k]; inc(cnt[k]). 每枚举一次i点清空一次cnt(不能用fillchar) 复杂度证明:设边数为m,枚举i->j为O(m),枚举k为O(sqrt(m)),因为度数比j大又与j相连的点最多有sqrt(m)个,总复杂度O(m sqr

2017-04-05 18:45:46 614

原创 [雅礼4-4]Tree 最大费用循环流

考虑构建网络流模型。 对于每条树边,由祖先向儿子连一条容量为di,费用为0的边。对于每条覆盖路径,由深度小的向深度大的连一条容量为1,费用为ci的边。跑一边最大费用循环流即可。 最大费用循环流基本思路: 1.建网络流那样有反向弧的图; 2.用spfa最长路在残量网络找正环(最好用dfs找),如果一个点在一次dfs中再次出现,则找到了一个环,把它流满。 3.知道找不到正环为止。代码type

2017-04-05 17:03:06 484

空空如也

空空如也

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

TA关注的人

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