自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [BZOJ2435]NOI2011道路修建|dfs|bfs

NOI怎么会有这么水的题。。dfs维护一下size随便搞搞。。#include#include#include#define N 1000005#define ll long longusing namespace std;struct edge{ int e,q,next;}ed[N*2];int n,s,e,q,ne=1,i,a[N],size[N];ll ans;v

2015-04-28 21:28:57 488

原创 [BZOJ1305]CQOI2009跳舞|最大流判定

一开始倒没把模型建对。。我们把每个人x拆为x1和x2两点,x1表示和喜欢的人跳舞,x2表示和不喜欢的人跳舞。那么若男生i和女生j互相喜欢,i1向j1连容量1的边;若不喜欢,i2向j2连容量1的边,每男生x由x1向x2连容量k的边,每个女生y由y2向y1连容量k的边,表示和不喜欢的人跳舞次数的限制。。  接下来从1开始枚举答案,初始时源到男生x1,女生y1到汇的边容量都为0,每次将这些边的容

2015-04-28 21:26:02 773

原创 [BZOJ1858]SCOI2010序列操作|线段树

一看以为是线段树水题,写起来发现好像询问4比较麻烦,调了好久。。对每个线段树节点维护sum为区间内1的个数,ml0、mr0表示左右的最长连续0长度,ml1,mr1同理,m0、m1为区间内连续0/1的最大长度,合并信息的时候用ml0、mr0、ml1,mr1来更新m0、m1,就和维护数列那题一样。。这里要注意合并时维护ml1,mr1、ml0、mr0的时候要考虑能不能延长到另半个区间去,就像下图一样

2015-04-28 21:22:07 1152

原创 [BZOJ1084]SCOI2005最大子矩阵|DP

我好弱啊这题不是应该一下就想到的吗我想了这么久。。   注意到m,这就好办了嘛。。m=1的时候好弄,f[i][j]表示前i个数选j个的最大和,有f[i][j]=min(f[i-1][j],min(f[k][j-1]+sum[k+1][i]))(0。。   推广到m=2的时候,f[i][j][k]表示第一列走到i第二列走到j,选k个的最大和,这时候最少有4种转移,f[i-1]

2015-04-23 14:48:10 441

原创 [BZOJ2301]HAOI2011 ProblemB|莫比乌斯

学了一下莫比乌斯反演,被虐的好惨啊。。    首先下界太碍事了,用容斥原理把一个询问拆成四个,把下界扔掉。。(x,y)=k,也就是(x/k,y/k)=1,所以可以把上界都除以k,设除完之后为n,m,那答案就是(x,y)==1。。    在学的时候我看到了两种转化方法,PoPoQQQ的和iwtwiioi的,我觉得PoPoQQQ的好理解一点,不过后来也理解了iwtwiioi的。。    我

2015-04-23 14:41:14 497

原创 [BZOJ1044]HAOI2008木棍分割|DP|二分答案

一开始以为是水题,后来发现第二问才是重要的地方QAQ。。   第一问二分答案+贪心,得出答案len。第二问的话f[i][j]表示前i根木棍断j个地方且满足第一问的方案数,枚举第j次断的地方进行转移,f[i][j]=sigma(f[k][j-1])(sum[k+1][i]可以得到O(nm^2)的算法,空间O(nm),都承受不了。。   发现i往后的时候k只会往后或不动,所以可以直接用

2015-04-23 14:39:28 440

原创 [BZOJ1597]Usaco2008Mar 土地购买|斜率优化dp

一看题我是不会做的。。好神。。   后来发现大概不排序没法搞,那就先排个序咯。。又发现如果i的长宽都小于j的长宽,那么买j的时候可以“顺带”买掉i,所以i可以不考虑。。用x来表示长,y来表示宽,先按x升序排序,然后从头往后扫,并维护一个y递减的单调栈,将i压入栈时,如果栈顶元素的y的y,那就将栈顶弹出,因为i的x一定>=栈顶的x,而i的y又大于栈顶的y,那栈顶就被i包含了,可以扔掉,注意这

2015-04-23 14:36:41 663

原创 [BZOJ2007]NOI2010海拔|最小割|平面图转对偶图|最短路

好久以前就想做但是那个时候不会做。。题目说海拔不一定是整数,纯属坑爹嘛。。可以证明如果有小数定不是最优(能贪就多贪嘛)。。然后显然最优的时候一定是走到了1就不会回到0了,也就是要分成两个点集,一个0,一个1,这不就是一最小割嘛。。看一看最大数据,250000+个点,直接跑最大流要挂。。注意到是平面图,而且S,T都在边界上,所以可以转对偶图跑最短路。。这里最要小心的就是rebuild的时候连

2015-04-23 14:35:29 594

原创 [BZOJ1058]ZJOI2007报表统计|平衡树

没啥好说的,码力题,两棵平衡树,一棵维护相邻差值,一棵维护数,插入的时候要记得删去对应差值。。懒得写splay了,正好学一下STL(以前不喜欢写。。)#include#include#include#include#define N 500005#define inf 0x3fffffffusing namespace std;int n,m,i,x,k,a[N],ans=inf

2015-04-23 14:33:50 481

原创 莫比乌斯反演学习笔记

数学真是太难了,Orz JZP,Orz PoPoQQQ,Orz……先介绍一个前置的东西。。积性函数对于定义在N+上的函数,若当时有,则是一个积性函数。特别地,如果在任何时候都成立,则是一个完全积性函数。显然,积性函数的积也是积性函数。   莫比乌斯函数:   定义为       显然,莫比乌斯函数是一个积性函数。       性质:

2015-04-23 09:00:50 981

原创 后缀数组学习笔记

妈呀被后缀数组虐的死去活来。。。一开始去看后缀树。。好像很麻烦的样子,后来再看后缀数组,理论好像很好懂的样子,不会实现呀。。这充分证明了我有多傻逼,花了整整一天才看懂如何实现,还是因为我基数排序没学好?。。。(update:然后又花了一天看懂求height。。。)好好看这张图。。。很重要。。无脑直接排序的时间复杂度是O(n^2logn)因为字串比较是O(n)这里介绍

2015-04-22 09:01:07 748

原创 KMP算法学习笔记

http://www.matrix67.com/blog/archives/115Orz maxtix67一直拖着到碰到了KMP算法的题才学。。设有字符串A:abefgababef        模式串 B:abefgabef当A与B进行匹配时,设i是A上的指针,j是B上的指针,则A和B匹配到第8位就会失配。按照常规方法,我们会将i跳回到2,j跳回到1进行匹配。观察之后我们会发

2015-04-21 09:28:50 918

原创 [BZOJ1057]ZJOI2007棋盘制作|DP|单调栈

这题好几天以前就看了,不过一直有一些细节想不通就没写下来。。首先发现棋盘矩阵上横纵坐标之和的奇偶性不同的点都是相反的,所以首先把横纵坐标之和为奇(或者是偶,这都不重要)的点取反,这样任务就变成了求一个最大全0或1的子矩阵。。先考虑一维的情况,h[i]表示以i为终点的最长连续0的长度,有h[i]=a[i]==0? h[i-1]+1:0,这样可以O(n)轻松求出。。拓展到高维,首先同样按照

2015-04-21 09:17:03 2354 2

原创 [BZOJ3889]USACO2015 Jan-Cow|最短路

挺傻逼的一道题,犯了一些傻逼错误,还写了对拍,拍出了别人的错误。。就是把航线上的每个点对暴力建边,然后跑双关键字最短路即可。。inf要开的够大。。#include#include#include#define ll long long#define N 10005#define inf 0x3f3f3f3f3f3f3f3fllusing namespace std;struct

2015-04-19 20:56:36 502

原创 [BZOJ3224]普通平衡树

模板题嘛。。splay:#include#include#include#define maxn 500005using namespace std;int i,n,opt,x,nd=0,ans,root=0,c[maxn][2],size[maxn],pre[maxn],same[maxn],num[maxn];void update(int x){size[x]=size[

2015-04-19 20:53:53 446

原创 [BZOJ3172]TJOI2013单词|AC自动机

这题比阿狸的打字机不知道简单多了。。还是弄出fail树来 root到每个串的路径上的点都标记+1,统计i串的danger节点在fail树上的子树上的标记个数就是它出现的次数。。#include#include#include#define N 2000005int n,i,nd=1,next[N],a[N][28],size[N],pos[N],que[N];char s[N];i

2015-04-19 20:52:44 437

原创 [BZOJ3110]K大数查询|线段树套线段树

妈呀这题好神好神好神。。我发现主席树好像做不了呀。。咋全写的是线段树套线段树呢。。后来还是看黄学长的代码看懂了。。果然我是看黄学长博客长大的。。有两种做法,大部分人是外层权值线段树,内层区间线段树,这个我写了,还是很好写。。lyd给了一种外层区间内层权值的做法,没看懂。。内层区间[l1,r1]在外层权值区间[l,r]下的意义是在[l1,r1]内有多少权值在[l,r]之间的数。。由于一开始是空的,每

2015-04-19 20:51:37 642

原创 [BZOJ2761]JLOI2011不重复的数字

我也想要这种省选题。。#include#include#includeusing namespace std;map a;int i,n,T,q;int main(){ scanf("%d",&T); while (T--) { scanf("%d",&n); a.clear(); scanf("%d",&q); a[q]=1;printf("%d",q);

2015-04-19 20:48:57 822

原创 [BZOJ2733]HNOI2012永无乡|平衡树启发式合并

一看题吓傻了根本不会做啊。。然后又看了几遍题,好像就是维护各个联通块的k大嘛。。一开始纠结了好久,后来想起好像没有断边的操作,那就好搞了。。第一次写splay的启发式合并,用splay维护每个联通块的重要度序列,然后可以弄个并查集,如果连边的时候是两个不同联通块,那就把size小的那个splay按中序遍历一个一个插入到size大的那个splay里去,这就是启发式合并。。询问就按findkth那样搞

2015-04-19 20:48:24 667

原创 [BZOJ2480]SDOI2012 Longge的问题|欧拉函数

不会做数学题啊。。考虑gcd(i,n)=d的i的个数s[d],那么s[d]=gcd(i/d,n/d)为1的i的个数,也就是phi(n/d),那么答案就是所以n的约数的phi之和,根据phi(i)=i*(1-1/p1)*(1-1/p2)*…*(1-1/pk)可以得出一个O(√n)的求欧拉函数算法,然后就可做了。标解貌似是利用欧拉函数的积性什么的。。看不太懂啊。。    放个官方解法的图。。

2015-04-19 20:44:36 514

原创 [BZOJ2434]NOI2011阿狸的打字机|AC自动机|fail树|树状数组

这题真是太神了,好多实用的技巧。。首先肯定是要先把每个要输出的串当模式串把自动机给建出来的,如果一个一个串复制出来再一个个插入显然非常慢。。。我们用在自动机上插入模式串的方法来建,初始时在0,新加一个字符就想下爬(或者新建),维护一个父亲指针,删除的时候就可以爬上去,这样就可以O(n)建出来了。。再考虑询问的问题,每次把串拿出来再放进自动机跑一遍显然太慢。。这里需要用到一个叫做fail树的东西

2015-04-19 20:38:30 736

原创 [BZOJ2330]SCOI2011糖果|差分约束

差分约束题。。学了一下差分约束,我觉得还是挺简单的,考虑f[u]-f[v],发现和最短路的松弛操作神似,最短路跑完之后对于一条边(v,u),显然有d[u],不就是上面差分约束的式子吗。。那就转化成最短(长)路做咯,以最短路为例了,对于每个f[u]-f[v],连一条v到u权值为c的边,然后跑最短路,如果有负环那就说明无解,没有的话跑完之后各点的d值就是解。。对于本题,d[a]==d[b],有 d

2015-04-19 20:32:51 525

原创 [BZOJ2243]SDOI2011染色|树链剖分|LCT

裸题嘛。。 先考虑一条线段上如何查询颜色段数,只要对每个线段树节点多维护一个左颜色和右颜色,然后合并的时候sum[x]=sum[lc]+sum[rc]-(左儿子的右颜色==右儿子的左颜色)。。实在太久没写树剖结果码+调试花了两节多晚自习,,各种傻逼错误,什么反向边忘加,标记忘记下传。。。还有就是更新答案的时候,关键的一点是要保证当前的两点(也就是a,b)是没有被更新到的,否则很难搞。。

2015-04-19 20:27:12 917

原创 [BZOJ2190]SDOI2008仪仗队|线性筛

答案就是所有满足gcd(x,y)=1的x#include#include#include#define N 40005using namespace std;int i,n,cnt=0,ans=0,phi[N],u[N],p[N];void getphi(){ int i,j; memset(u,0,sizeof(u)); phi[1]=1; fo

2015-04-18 11:47:10 780

原创 [BZOJ2049]SDOI2008洞穴勘测|LCT|并查集

LCT或者按秩合并的并查集维护一下联通性就行了。。LCT:#include#includeusing namespace std;const int maxn=10005,MAX=999999999;int c[maxn][2],pre[maxn],isroot[maxn],rev[maxn],n,m,u,v,i;char com[10];void mark(int x){i

2015-04-18 11:45:18 450

原创 [BZOJ2038]2009集训队 小Z的袜子|莫队算法

闻名已久的莫队算法,很巧妙,就是通过调整询问顺序来优化时间复杂度。把整个序列分成√n块,每块√n个数。设我们已知i到j的可选方案数,并有一个记录了i到j各个颜色数量的数组,那么我们显然可以在O(1)的时间内得到(i±1,j±1)的答案。。令from(i)为询问i的左端点所在的块,将询问按from(i)为第一关键字,r[i]为第二关键字升序排序,先暴力出第一个询问的答案,然后暴力转移到后面的询问。在

2015-04-18 11:40:41 506

原创 [BZOJ2005]NOI2010能量采集|数学

数学题。。首先要知道点(x,y)与原点连线上整点的个数为gcd(x,y)(除原点)。我们可以找到最小的(x0,y0)在连线上,显然gcd(x0,y0)=1,那么所有(x0*k,y0*k)(x0*k=2&&k*d#include#include#define ll long longusing namespace std;ll g[100005],f[100005],ans;int i

2015-04-18 11:39:07 547

原创 [BZOJ2006]NOI2010超级钢琴|DP|堆|RMQ

NOI题果然难得多,不会做啊。。后来看题解有说是要主席树啥的,,理解不了。。看懂了一个RMQ+堆的。。考虑一个序列的起点i,终点的范围是可以计算的,然后维护一下前缀和sum,起点的sum一定,那么终点的sum最大是答案最优,找这个最大可以用ST算法搞定。。对于一个四元组(s,l,r,m)表示起点为s,终点在[l,r]内,最优解在终点为m取到,然后以四元组的最优解大小为key对每一个点为起点的四元组

2015-04-18 11:38:50 483

原创 [BZOJ2002]HNOI2010弹飞绵羊|LCT

貌似有很多做法。。LCT打的第一题就是这个,年代久远了。。从后往前走的话这肯定是一颗树嘛。。查询就是查深度嘛。。修改就是断开一条边连到另一颗树上去嘛。。以前的巨丑无比的代码:#include#include#includeusing namespace std;const int maxn=200005,MAX=999999999;int c[maxn][3],pre[m

2015-04-18 11:24:49 463

原创 [BZOJ1968]AHOI2005 约数研究

看到这题想到线性筛,估计是可以做的。。不过有更简单的方法,考虑每个数对答案的贡献,显然就是能够整除它的数的数量,所以贡献就是n/i,秒变傻逼题。。#includeint ans=0,n;int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) ans+=n/i; printf("%d",ans);}

2015-04-18 11:15:14 438

原创 [BZOJ1934]SHOI2007 Vote|最小割

一开始就觉得是最小割转最大流做,,没想出怎么建图。。其实也挺显然,将S向所有1的人连边,所有0的人像T连边,有边的连起双向边,对于一条S到T的路径S,u,v,T,割掉S-u表示u违背自己,代价为1,割掉u-v表示朋友冲突,代价为1,割掉v-T表示v违背自己,代价为1,所以就是最小割。。#include#include#define N 305#define M 100005#defin

2015-04-18 11:13:43 824

原创 [BZOJ1927]SDOI2010星际竞速|费用流

还是比较显然的费用流,不过一开始建图想错了。。把每个点i拆成i1,i2,若i到j有权值为q的边那就i1向j2连费用q流量1的边,源向每个i1连流量1费用0的边,向每个i2连流量1费用为瞬时移动到这个点的能量的费用的边,每个i2向汇连流量1,费用0的边,最小费用流就是答案。。可以用类似最小路径覆盖的思路去理解,连向汇的边是保证每个点都经过一次,源连向i2的边表示直接瞬移过去,i1连向j2的边表示从图

2015-04-18 11:12:22 767

原创 [BZOJ1912]APIO2010巡逻|树的直径

这题看完大概的做法也想到了。。就是找出两条最长的路径连成环嘛。。但是不能简单的这样考虑,因为找次长的时候并不是不能走最长的路径上的边,只是走了第一次就等于白走了,也就是不仅没有产生新的贡献反而抵消了第一次的贡献。。根据这个思路,K=1的时候直接找出一条最长路径len,答案即为2*(n-1)-len+1,K=2时,据前面的分析,把所有最长路径上的边权改为-1(双向!!),然后再求最长,答案即为2*(

2015-04-18 11:11:15 767

原创 [BZOJ1911]APIO2010特别行动队|斜率优化DP

DP比较显然,直接上斜率优化就好了。。斜率优化笔记#include#include#include#include#include#define ll long long#define q1 que[head]#define q2 que[head+1]#define t1 que[tail]#define t2 que[tail-1]#define maxn 1000

2015-04-18 11:06:49 496

原创 [BZOJ1878]SDOI2009HH的项链|树状数组

这道题纠结了好久。。只想得到线段树套平衡树的方法。。莫队会T掉。。后来看代码终于想通了,还是要离线搞。。读入之后预处理出每个位置下一个同颜色的位置next[],再将询问按左端点升序排序,用sum[i]表示1-i的颜色数,初始时只记录每种颜色第一个出现的位置。。用一个l指针,表示所有l之前的所有位置的颜色都已用next[]转移到l后了,这样保证颜色不重不漏,依次处理询问,将l不断向右移动,移动时把l

2015-04-18 11:04:07 441

原创 [BZOJ1834]ZJOI2010网络扩容|最大流|费用流

差不多就是模板题嘛。。一开始先跑最大流不用多说,跑完后在残余网络上再建图,给每条原来边建一条流量无穷,费用为这条边扩容费用的边,再新建一个源点向1连流量为k费用0的边,跑费用流即可。。正确性貌似很显然。。#include#include#include#define maxn 1005#define M 30005#define inf 99999999using namespac

2015-04-18 11:02:29 431

原创 [BZOJ1500]NOI2005 维修数列|splay

这题号称是noi出过最变态的数据结构题,,感觉还差不多嘛。。一开始我一直在纠结splay上的节点一点要有一个key值的啊,要是以这个数在序列中的位置作为key值的话又要插入又要删除肯定弄不了。。然后想了很久突然顿悟。。貌似我给一个初始顺序以后是不用访问key的&&找第k位的数只要写一个findkth就行了嘛。。(当时太弱)然后我就一口气写了下来。。对每个节点维护size,sum,maxsu

2015-04-18 10:59:07 1905 1

原创 [BZOJ1833]ZJOI2010 数字计数|数位DP

数位DP太坑爹了(我太弱了),细节好多好多,特别要注意0的地方。。先预处理f[i][j][k]表示第i位为j的串数字k出现的次数,然后YY一下后面的cal。。做数位DP的时候千万要冷静,考虑全面。。#include#include#define ll long longusing namespace std;ll a,b,f[15][15][15],sa[15],sb[15],m[15

2015-04-18 10:57:23 453

原创 [BZOJ1800]AHOI2009 FLY

数据这么小,维护一下前缀和,枚举所以可能,根据等弧对等边用前缀和判断一下即可。。#include#include#define N 25using namespace std;int n,ans=0,i,j,k,l,a[N],sum[N];int main(){ scanf("%d",&n); sum[0]=0; for (i=1;i<=n;i++) { s

2015-04-18 10:55:39 714

原创 [BZOJ1798]AHOI2009 维护序列|线段树|splay

水题,线段树就可以搞定,我又去写splay作死了。。注意的是这里的模数比较大,要开long long,另外要注意标记下放的优先,在打乘法标记的时候加法标记也要乘,要先下放乘法标记。。#include#include#include#define ll long long#define maxn 100005using namespace std;int i,n,m,nd=0,roo

2015-04-18 10:51:52 588

空空如也

空空如也

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

TA关注的人

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