自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

辗转山河弋流歌

暂停更新和答疑

  • 博客(59)
  • 收藏
  • 关注

原创 【BZOJ3910】火车 LCA+并查集

题解:首先找两点之间路径可以用倍增LCA。 然后标记哪个点走过可以用并查集,均摊下来最后是线性的。代码:#include #include #include #include #define N 501000#define LOGN 20using namespace std;struct Eli{ int v,next;}e[N1];int head

2015-03-31 16:08:26 1513

原创 【BZOJ3550】【ONTAK2010】 Vacation 线性规划转费用流

题解:我依然只会做,不会证。 如果初学者,可以一览,想深究,请移步。 After all,i am a Juruo at present.After\ all, i\ am\ a\ Juruo\ at\ present.      ~~~~~首先我们可以有基础的线性规划:每连续nn点最多选kk个。 转换成数学模型: (其中 aa 数组表示选(1)与不选(0),而 tt 数组则是辅助

2015-03-30 14:08:37 1715

原创 【BZOJ2668】【cqoi2012】交换棋子 费用流

前言:本来以为这种双限制流量的方法很通用很好用,所以没有去写那个一个点拆成俩的奇葩做法……但是后来我发现,这种一个点拆成三个的方法没有任何意义,它只是针对了这道题的特殊性质噗。好像并不能拓展。题解:首先图转化成源点往开始图的黑点(当然你要用白点也不是不行)流流量,最终从结束图的黑点流向汇点。这个应该都能想到。然后关键是怎么在流过一次后同时限制两个点。 这也是我所想知道的……可是,

2015-03-28 16:53:22 1751

原创 【BZOJ3629】【JLOI2014】聪明的燕姿 dfs 素数筛

题解:我们发现把一个数分解质因数以后然后可以根据每种质因数的个数算出这个数的约数和。所以我们可以暴力拆解每个数,根号时间复杂度分解。 就是枚举每种质数它用了多少,然后这个数除一下再往下一层深搜。代码:#include #include #include #include #define N 50100using namespace std;int prime[N],cnt

2015-03-28 09:19:09 1533

原创 【BZOJ3211】花神游历各国 树状数组 并查集 均摊分析

题解:一个点开几次方就没啦。所以我们只需要修改不是0或者1的点就行了。 均摊基本O(n)O(n)。 然后用并查集维护一个点右边第一个不是0的数。手写读入果然高大上。卡rank神器。 顺便Orz一下wys大神。代码:#include #include #include #include #include #define N 100100using namespace

2015-03-27 23:53:36 1276

原创 【BZOJ2751】【HAOI2012】容易题(easy) 快速幂快速乘

题解:询问只有10万个,所以有相同性质的连一块的点很多。 所以我们把10910^9点分成最多2∗1052*10^5块。然后就随便乱搞了。分成2∗1052*10^5块的过程是先把点排个序,然后就对每个点暴力往下删了。 然后分完了以后就是把所有的点的选择个数xx乘起来就行了。长度为yy那就乘xyx^y然后可能会爆,所以需要快速乘,请见mul部分。代码:#include #

2015-03-27 22:40:34 1573

原创 【BZOJ2435】【Noi2011】道路修建 树形DP

题解:树形DP记录size。然后每个子树回来是边的两边数量是size子节点size_{子节点}和n−size子节点n-size_{子节点}代码:#include #include #include #include #define N 1001000#define inf 0x3f3f3f3fusing namespace std;struct Eli{ i

2015-03-26 20:43:29 1983

原创 【BZOJ2427】【HAOI2010】软件安装 tarjan+树形背包DP

题解:首先它可能有环。所以先tarjan缩点。 然后跑树形背包。代码:#include #include #include #include #define N 120#define M 600using namespace std;struct Eli{ int v,next;}e[M];int head[N],cnt;inline void ad

2015-03-26 20:23:49 1668

原创 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演+分块+前缀和

莫比乌斯反演公式若Fn=∑d|nfdF_n =\sum_{d|n} f_d 则fn=∑d|nFnd∗μdf_n = \sum_{d|n} F_{\frac n d}*\mu_d 其中μ\mu是莫比乌斯函数,跟FF和ff无关。莫比乌斯函数当d=1d=1时: μd=1\mu_d = 1 当dd可以被拆解成kk个质因数之积且这些质因数两两不同时: μd=(−1)k\mu_d =

2015-03-26 10:56:39 1539

原创 【BZOJ2440】【中山市选2011】完全平方数 二分+容斥+莫比乌斯函数线性筛

题解:给出PoPoQQQ大爷的题解链接: http://blog.csdn.net/popoqqq/article/details/42076037 我太弱,可以直接看大爷的不用看我的。首先整体思想上我们可以二分check前x个数中有多少个符合要求的数。 然后这个怎么check呢?发现我们枚举每个数,看范围内是它的平方的倍数的数有多少个就行了。然后发现容斥一下,有些数是要加的,而有些

2015-03-26 10:02:10 1216

原创 【BZOJ2282】【Sdoi2011】消防 树的直径+双指针+单调队列 有一系列乱七八糟的证明

题解:首先表示这个代码是线性的,是怎么构造数据也卡不住的! 而网上普遍流行的那个二分的是基于直径长度dd的O(dlog2d)O(dlog_2 d)算法,一旦直径长点,然后数据范围大点,它就挂啦!诶我什么心态啊。算法:首先答案路径一定在某直径上[证明1,见文末],然后我们求出这个直径序列(任一直径即可[证明2,见文末]), 处理出一些数组: fif_i表示i是路径左端点时直径上

2015-03-25 20:57:01 2389

原创 【BZOJ2005】【Noi2010】能量采集 gcd

题解:一个点(a,b)(a,b)跟点(0,0)(0,0)中间隔的点的数量是gcd(a,b)gcd(a,b) 设fif_i为gcd(a,b)=igcd(a,b)=i的数对的对数。 那么ans=∑min(n,m)i=1fians=\sum_{i=1}^{min(n,m)} f_i然后有约数ii的数对的数量是⌊n/i⌋∗⌊m/i⌋\lfloor n/i\rfloor*\lfloor m/i\

2015-03-25 16:19:42 1266

原创 【BZOJ3897】Power 线段树求前驱后缀

题解:首先我们从大到小排个序,然后感性来讲,肯定是从大到小能取多少就取多少的。然后我们取一个点时,还不能取多了,不符题意或者影响到其它已经取了的点对吧。所以我们求个前驱pre,后缀suc,就是最近的前面的取了的点,和后面的。 这个可以用线段树求,也可以set神马的快速水过啦啦啦。然后此点既然是之前取的,肯定是能取多少尽量取多少啦,拿后缀举例,也就是你取当前点,然后等到后缀那个点,肯定

2015-03-25 15:51:03 1621

原创 【BZOJ1925】【Sdoi2010】地精部落 动规 不知语,人已醉。 Euler Zigzag Number

。不会啊。Euler Zigzag Number好神啊~ 但是我可以给你丽洁爷的链接 http://hi.baidu.com/wjbzbmr/item/da020be63f6f41f92b09a410 fi,j=fi,j−1+fi−1,i−jf_{i,j}=f_{i,{j-1}}+f_{i-1,i-j} 丽洁原话:【是1到n的排列中第一个是k且一开始下降的数量】 就是说fi,jf

2015-03-25 00:05:56 2567 2

原创 【BZOJ1816】【Cqoi2010】扑克牌 二分答案+贪心+构造(证明)

题解:首先如果二分答案,它是满足单调性的。 但关键在于怎么check。我们可以贪心地给二分出的mid分配min()

2015-03-24 18:44:30 1824 1

原创 【BZOJ1800】【Ahoi2009】fly 飞行棋

题解:数据范围只有20。暴力乱搞吧。我的暴力: 枚举每个点(n4)(n^4)这道题应该是可以做到线性的~~代码:#include #include #include #include #define N 25using namespace std;int n,a[N],sum[N];int ans;int main(){ freopen("t

2015-03-24 16:56:31 1244

原创 【BZOJ1263】【SCOI2006】整数划分 高精度+构造

题解:一直*3就好了,最后如果剩1,那么把最后一个3变成4,如果剩2,直接乘。代码:#include #include #include #include #define N 5010#define M 100000000using namespace std;struct HP{ int x[N],y; void init(){x[0]=1;}

2015-03-24 16:36:10 1212

原创 【BZOJ1053】【HAOI2007】反素数ant 打表。/搜索

题解:以前玩过一件事,就是看20Y以内约数个数最多的数是哪个,约数个数是多少。 http://blog.csdn.net/vmurder/article/details/40429249 然后记得约数个数最多1536个,那么我们对于此题就可以打表啦! ,,,上面那篇博客还是我年幼无知的产品,不能用那个来打表的。然后有一个性质就是若x=y*k,那么x的约数个数肯定比y多对吧~ 那我们

2015-03-24 12:26:20 1357

原创 【BZOJ1008】【HNOI2008】越狱 排除法+快速幂

题解:全集是mnm^n,然后补集是第一个随便选,其后每个点有m-1种选法,是m∗(m−1)n−1m*{(m-1)}^{n-1}代码:#include #include #include #include #define mod 100003using namespace std;long long n,m;long long power(long long x,lo

2015-03-23 23:22:09 1266

原创 【BZOJ1003】【ZJOI2006】物流运输trans 最短路预处理+动态规划

题解:首先我们跑出fi,jf_{i,j}表示i到j这些天都是相同路线的最小代价。 然后暴力维护gig_i表示前i天最小代价。fi,jf_{i,j}可以枚举i,ji,j,暴力处理哪些点不能用,然后跑最短路。 时间复杂度 暴力处理废点O(n3m)O(n^3m) SPFA 是O(n2spfa)O(n^2 spfa)大约O(n2m2)?O(n^2m^2)?反正能过。 然后暴力处理废点

2015-03-23 20:46:44 1919

原创 【BZOJ1452】【JSOI2009】Count 二维树状数组

题解:暴力维护100个二维树状数组。妈呀因为没测样例就交还RE一次(虽然显示是WA)代码:#include #include #include #include #define N 305#define P 105using namespace std;int a[P][N][N],n,m,p;inline int lowbit(int x){return x&

2015-03-23 09:07:48 1563

原创 【BZOJ2438】【中山市选2011】杀人游戏 强连通分量+期望

题解:我并不知道为什么要求SCC,我的想法是A认识B,B认识C,C认识D,D认识A,但C跟A有毛关系?或许是我太弱,并不知道是shenmegui。 但是姑且粘一份AC代码然后跑吧。代码:#include #include #include #include #define N 101000#define M 301000#define inf 0x3f3f3f3fu

2015-03-23 00:10:17 1693

原创 【BZOJ3143】【Hnoi2013】游走 高斯消元 解期望方程

哎一听这个题目名字就感觉好有趣。题解:(注意:下方的题解每一步如果,相当于你写个递归函数,每次求完了下一层的值才能求此层的。Wow略高能,) 首先我们整体上既然是求期望,那么我们如果能算出每条边的期望经过次数wiw_i,那么只需要把1~m这些边权值从小到大按期望从大到小填入这些边,就可以得到最小的期望路径长度啦。然后怎么求每条边的期望经过次数呢? 我们设边ii的两端点为uu和v

2015-03-22 21:47:47 3249

原创 【BZOJ1880】【Sdoi2009】Elaxia的路线 spfa+拓扑图求最长链

题意:无向连通图上,S→TS→T有若干条最短路,s→ts→t也有若干条最短路,搞出来两条最短路,要求重合的尽量长(可以方向不同)。题解:spfa处理出这四个点到每个点的最短路,然后枚举求哪些边既在S→TS→T某条最短路里,又在s−→ts-→t的某条最短路里,然后这是个拓扑图,跑最长链。 哎呀没什么可说的么,水题贴代码就好啦。代码:#include #include #

2015-03-22 14:10:50 1739

原创 【BZOJ2333】【SCOI2011】棘手的操作 可并堆+堆套堆(什么嘛,用个set就好啦)

可并堆我写的是随机堆,然后模板可见上一篇博客。 【BZOJ1455】罗马游戏 可并堆 http://blog.csdn.net/vmurder/article/details/44513511解一下题意:原始题意:有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作:U x y:加一条边,连接第x个节点和第y

2015-03-21 23:48:59 41825

原创 【BZOJ1455】罗马游戏 可并堆

题解:可并堆: 其实它只是个函数,而不是数据结构,它的数据结构只是“堆”? 可并的随机堆才算一个?两个堆合并时,对比大小决定谁是父亲,然后劣的和优的 的子再递归进行比较,直到一头为空(无法也不用再比较时),能满足正常插入就可以保证二叉的性质时停止。代码:可并随机堆(随机挂到某子上)#include #include #include #include #define

2015-03-21 09:36:21 1430

原创 【BZOJ3620】似乎在梦中见过的样子 KMP

题解:对于一个区间[l,r][l,r] , 若存在一个长度≥k\ge k并且r−l2 的串K,它既相同于以ll为开端的等长串,又相同于以rr为结尾的等长串,那么这个区间就是一个可行串。我们枚举区间左端点,然后可以利用KMP在线性的时间内处理完所有的右端点对答案的贡献。代码:#include #include #include #include #define N 160

2015-03-20 23:38:10 2036

原创 【BZOJ2563】阿狸和桃子的游戏 贪心

题解:PoPoQQQ大爷已经说得很详细了。 http://blog.csdn.net/PoPoQQQ/article/details/44495319代码:#include #include #include #include #define N 10100using namespace std;int n,m;long long ans,x[N];int main(

2015-03-20 22:57:23 1160

原创 【BZOJ1216】【HNOI2003】操作系统 双键值堆

题解:写个结构体,重载一下小于号,然后扔优先队列里玩。 每次进来新的任务就把这段时间分给队列里的任务修改一下,然后把新的任务入队。 水题就瞎说点什么吧。代码:#include #include #include #include #include #define N 101000using namespace std;struct Eli{ int d,t,

2015-03-20 22:46:49 1171

原创 【BZOJ2741】【FOTILE模拟赛】L 可持久化字典树+分块

题解:首先我们处理出来sum[0,n]sum[0,n]作为异或前缀和,然后答案就不再是[l,r][l,r]中间某段区间的异或和,而转化成求了[l−1,r][l-1,r]中任意两点异或和的最大值。然后我们分块处理出fi,jf_{i,j}表示 [第i块的开头,j−1][第i块的开头,j-1] 这段区间中任取一点和点jj异或和的最大值,而用gi,jg_{i,j}做个类似前缀和的操作,记录第ii块

2015-03-20 20:22:51 2401

原创 【BZOJ2152】聪聪可可 树分治

题解:裸的处理树上路径的树分治。代码:#include #include #include #include #define N 20100#define V e[i].v#define inf 0x3f3f3f3fusing namespace std;struct Eli{ int v,len,next;}e[N1];int head[N],cnt

2015-03-18 19:47:55 1425

原创 【BZOJ1758】【Wc2010】重建计划 分数规划+树分治单调队列check

题解:首先比较显然会想到分数规划模型。 不太好想,先放过。我们树分治处理经过每个点的路径。 然后对于在[L,R][L,R]区间内的每个长度记录最长距离。 然后每棵子树跟之前记录的数组处理一下,算出当前这棵子树中点为一端点,经过根节点(重心)的最优答案,然后再更新记录最长距离的数组。貌似很科学,但是这个更新答案的过程,实际上是O(n2)O(n^2)的,并不能接受。所以就有了下述

2015-03-18 18:12:53 2829 1

原创 【BZOJ2466】【中山市选2009】树 高斯消元解异或方程组

题解:参照此题解,也是我写的,俩题一样。 【POJ1681】Painter’s Problem 高斯消元,求最小∑系数的异或方程组代码:#include #include #include #include #include #define N 105#define inf 0x3f3f3f3fusing namespace std;bool a[N][N],x

2015-03-17 22:44:16 1405

原创 【自用】POJ1064 Cable master 且来说说卡精度的心得

题意:多组数据,n个小棒,分成m段,最长多长? 不能短于0.01,如果分不出来,输出”0.00”题解:满足单调性,来二分吧。心得:来,我们看着代码说话。判无解的处理首先最多能分多少段开了long long。 long long maxd,m; 然后处理的时候因为精度损失,所以加了eps maxd+=(int)(a[i]*100.0+eps);eps

2015-03-17 20:17:10 2551

原创 【POJ2114】Boatherds 树分治

题意:求是否有长度为K的路径。 每组数据 N,表示树有N个点。 然后N行,每行若干个数对(a,b)(a,b),其中第i行时表示i到a有一条长为b的无向边。输入到0截止。 然后若干个数表示K,每个数输出下。 到0为止。然后数据的N也是到0为止。 存在 puts("AYE"); 否则 puts("NAY");每组数据最后输出一个dot,就是 .题解:三倍经验题,

2015-03-16 16:35:27 1252

原创 【POJ1987】Distance Statistics ==【POJ1741】 树分治

广告:#include <stdio.h>int main(){ puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44307489");}题意&题解http://blog.csdn.net/vmurder/article/details/44302921代码:(同一道题)#in

2015-03-16 16:00:26 1357

原创 【POJ1741】Tree 树分治 模板咯?

题意:给你一棵无根树,求有多少点对之间距离题解:树分治。 然后对于一个重心X,我们把它的所有子树中的所有点存到结构体数组中。 结构体中存距离和子树编号。 第一遍sort,我们双指针扫哪些点对符合要求。 第二遍sort,我们把同一子树中还符合要求的点对数目删掉。 sort是O(nlogn)O(nlogn),处理是O(n)O(n)。 然后分治logn层,总时间复杂度O(nl

2015-03-16 11:19:59 2725

原创 【秀优越(xie e)】原来出题也可以这么恶心。

通过邪恶的数据范围和数据限制竟然可以把一道传统题出成题答2333。诶毕竟内部互测,题目就不往上贴了。特殊限制---题目作废,输出M行“Orz  PoPoQQQ”-Max{D}(Min{D}PP∑D 

2015-03-15 23:42:45 1047

原创 【BZOJ2815】【ZJOI2012】灾难 阿米巴和小强题 动态倍增LCA 灾难树

题解:我们构建一颗灾难树,使得一个节点的任意一个祖先灭绝,则其会灭绝。 则可以按照拓扑序扫每个节点,然后加入到灾难树中时只需要把它的父亲赋成它所有食物的LCA就好了。 我们可以动态处理每个节点的倍增lca数组fi,jf_{i,j}表示i的第(1j)(1高祖先。代码:#include #include #include #include #include #defi

2015-03-06 20:24:49 1852

原创 【BZOJ1898】【Zjoi2004】Swamp 沼泽鳄鱼 矩阵乘法

题解:食人鱼循环2、3、4,lcm=12。 所以12次转移为一组,这么进行快速幂矩乘,最后把余数那几次转移乘上。代码:#include #include #include #include #define T 55#define mod 10000using namespace std;struct MRX{ int x[T][T];}Trs[13]

2015-03-06 16:24:10 1460

空空如也

空空如也

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

TA关注的人

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