自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spoj Count on a tree【主席树】

题意:给一棵树还有一些询问求从u-v这条路径上点的权值的第K大。我们可以从根开始维护主席树,就相当于以根为起点维护前缀和,这样我们可以求出u-v这条路径上对应点的权值,对u,v求一下lca(最近公共祖先),然后点的权值就是c[u]+c[v]-2*[lca(u,v)],然后同样二分找第k大。#include#include#include#includeusing namespace

2015-06-27 17:10:43 445

原创 POJ2104 K-th Number【主席树】

题意:给一段序列,还有一些询问,查询l-r中的第k大的数是什么主席树求第K大的板子,维护前缀和,然后作差二分找第k大就是#include#include#includeusing namespace std;const int MAXN=100010;int tot,a[MAXN],n;int vec[MAXN],idx;int c[MAXN*30],lson[MAXN*30

2015-06-27 17:02:06 397

原创 SPOJ - DQUERY 【主席树】

题意:给出一段序列,然后有q个询问,要求求出下标l-r的出现数的种数。在线方法就可以用主席树,这里T[i]是根据i-n的数建立的线段数,每次更新时,如果当前的数在上一个状态没有出现过,可以直接插入,出现一条新链,如果出现过,应该先把这个数擦出,然后在这个擦除的状态上更新,这样查询的时候就只要查询T[l]这个线段数上1-r的和了,[1,l-1]的和应该是0,因为对于T[l],前面都没有插入到这颗

2015-06-26 10:50:43 391

原创 HDU5261 蜀道难【单调队列】

题意:中文题,他给的半径实际上就是两点之间的距离,然后要求找出两个点的权值加上之间的距离最大。a数组表示每个点的权值,设两个点分别是i,j,所以答案就是a[i]-i*r+a[j]+j*r,对于一个j应该要找到满足要求最大的a[i]-i*r,所以就用单调队列了,还要注意就是单调队列里相等的话就直接加到队尾,优先取编号小的。#include#include#includeusing na

2015-06-24 10:01:48 539

原创 HDU5016 Mart Master II【点分治】

题意:给出一棵数,树上有些点有商店,要你建一个商店使你可以得到最多的顾客,顾客选择去离他最近的商店(距离相同去编号小的)。首先预处理一下所有点离他最近的商店,记录下来编号和距离,用一个pair就好了。first记录距离,second记录编号,排序也刚好符合题意。。预处理感觉和spfa差不多那样弄一下(其他方法我不会。。)。。然后就是点分治了,找到每一次重心后,求出到这个点的距离,用dis[

2015-05-15 19:05:44 429

原创 HDU4871 Shortest-path tree【最短路+点分治】

题意:给出一张图,要求从1点开始跑最短路,并以1为根生产一棵最短路树(长度相同找到字典序最小的),然后求出这个树上恰好经过k个点的最长路径,并输出数量。从1点跑一遍最短路,然后dfs生产最短路生成树,然后点分治,找到重心之后对重心每条边算一次经过了i个点的最长路,然后还要用数组记录一下前面经过了i个点的最长路。。处理方法在讲点分治的论文上有。#include#include#inclu

2015-05-14 15:55:47 409

原创 POJ1987 Distance Statistics【点分治】

题意:给一棵树求之间距离不超过k的点对数量。。和poj1741一模一样。。。一样的做法。。每次找经过根的点对的数量。。统计数量时,排个序然后头尾开始找数量就好#include#include#includeusing namespace std;const int MAXN=40010;const int INF=1<<30;struct EDGE{ int v,next;

2015-05-09 12:35:42 385

原创 bzoj2152 聪聪可可【点分治】

题意:中文题。。。。。。按点分治的的方法,每次都求出经过根的可行方案的个数,这里要求是3的倍数,所以我们可以把距离根的距离%3,那么取余后的距离根的距离为1和2的可以组成3,两个0当然也可以,这里用cnt[0],cnt[1],cnt[2]表示0,1,2的个数,对每个1可以有cnt[2]个2与他组成符合条件的路,所以数量就是cnt[1]*cnt[2],从2跑到1也可以所以还要*2,这个结果就是c

2015-05-08 19:33:55 451

原创 POJ1741 Tree

题意:找出一棵树中有多少个点对之间的距离小于等于k。。论文上的题。点分治,找到树的重心,然后计算经过这个重心的点对,计算从根到这个子树每个节点的距离,然后找到所有点对过根的距离小于等于k的,然后再减去再同一棵子树里的就行了,然后分治一直递归下去。。#include#include#includeusing namespace std;const int MAXN=10010;

2015-05-05 15:45:21 271

原创 HDU5221 Occupation【树链剖分+线段树】

题意:有三种操作,1代表占领u-v这条路径上的所有点,2表示失去u这个点,3占领以u为根的子树的所有点。。对每一个询问输出他占领城市的权值之和。。首先树链剖分处理一下,然后用线段树维护区间求和区间查询就好了,查询过的点再置0。。。处理子树可以根据dfs序来求,可以在树链剖分的时候记录下这个点的dfs序,然后查询子树就可以直接有一个区间了。1操作没有想到处理一个点的时候错了。。wa了几次

2015-05-04 13:23:11 345

原创 HDU2825 Wireless Password【AC自动机】

题意:求出题目所给的m个串中至少出现k个串且长度为n的字符串的个数。。AC自动机+状压DP。。。感觉不懂状压DP还是弄懂状压DP比较好AC自动机的核心其实就是状态转移。。dp[i][j][k],i表示目前的长度,j表示AC自动机的状态(转移到了哪个节点),k表示已经出现了哪几个串的状态。。AC自动机在转移的时候要根据fail指针适当的合并状态,因为转移到了这个节点,这个节点的fail也

2015-04-30 21:14:41 398

原创 HDU4691 Front compression【后缀数组】

题意:先给出一个串,然后下面给一个n表示输入串的个数,然后每行两个数表示输入的串的起点和重点(左闭右开)。。问的是 不压缩和压缩之后的大小。。每个字符占1大小,空格和回车也占1.。很基本的后缀数组,求lcp,因为不会写RMQ。。。所以直接写线段树了。。每次求一下这个串与上一个串的lcp。。然后处理就好了#include#include#include#define ls (k<<

2015-04-28 15:24:08 414

原创 HDU5212 Code

题意:输出那个程序的结果这题其实就是求任意一个数与每一个数的gcd×(gcd-1),然后全部加起来。。把每个数值对应的个数记下来,然后从最大的数开始,找这个数的倍数,如果gcd是x那个构成这个gcd的两个数一定都是x的倍数,如果有k个数是x的倍数,那么这k个数任意组合就可以形成k*k中情况,这写数中也有可能存在gcd是2×想,3×x的,所以要减去形成gcd是2*x,3*x的情况,从大到小就

2015-04-27 12:43:38 421

原创 ural1297 Palindrome【后缀数组】

题意:给出一个串,求出这个串的最长回文字串。用后缀数组解决,把这个串反向并接在原串后面,中间加一个没有出现过的字符。然后枚举回文字串的中心(这里要按串的长度分成奇数长度和偶数长度),求这个枚举的位置和在反向接上去的那个位置,这两个位置之间的最长公共前缀就可以了。。求公共前缀用个线段树维护就好了#include#include#include#define ls (k<<1)#def

2015-04-25 12:06:35 329

原创 SPOJ Query on a tree

题意:给出一个n个节点的树,边的标号分别是1-n-1,然后有两种操作,CHANGE 将第i条边的权值改成ti,QUERY 查询a点到b点中的边的最大权值。。QTREE系列的第一题,第一次写树链剖分,树链剖分之后用线段树解决,中途出现了RE和WA,找了几天才解决,都在代码中注释了。。#include#include#include#include#define ls (k<<1)#

2015-03-20 19:14:24 275

原创 HDU3943 K-th Nya Number(数位DP)

题意:给出l,r和x,y,要求找出l道r之间含有x个4,y个7的第k大的数。数位DP,先预处理一下,处理处当前是i位数,含有x个4,y个7的数的个数,然后从高位到低位枚举数字就可以了。然后二分查找。。代码有注释#include#include#includeusing namespace std;typedef long long ll;ll dp[21][21][21];

2015-01-26 12:20:58 442

原创 bzoj2038 [2009国家集训队]小Z的袜子(hose) (分块)

题意:中文题。。。用分块写的,每次增加一个数x,能形成的种数,ans就增加2*cnt[x],然后再cnt[x]++,每减少一个数,cnt[x]--,ans减少2*cnt[x]。。。就是这样搞了。。#include#include#include#includeusing namespace std;const int MAXN=50010;int vec[MAXN],idx;

2014-12-19 16:29:13 344

原创 bzoj1588 [HNOI2002]营业额统计 (Splay)

题意:中文题。。不多说。这题就是裸的Splay模板。。。但是出了一个问题。。导致我WA了12次(最后随机数对拍才找到)。。。没插入一个点,把这个点旋转到根,然后找到根的左子树最靠右边的的,根的右子树最靠左边的点,然后相减处理下就好。。。这里我是WA在,每把一个点旋转到根,忘记把表示根节点的那个点修改成根了。。。然后还RE了几发,原因是我写的是多组数据(测试是单组数据),然后我需要初始化

2014-12-14 10:54:10 411

原创 HDU3487 Play with Chain (Splay)

题意:给两种操作,一种是切下[a,b]这一段加到c这个位置之后,还有一个翻转[a,b]这个位置,操作过后输出序列。Splay。。。。虽然理论比较简单,但本渣还是写了一下午+调了3个小时。。。对于两种操作,切下来的时候就是先把a-1旋转到根,然后把b+1旋转到a-1那个节点的右边,然后b+1这个节点的左子树就是[a,b]的序列了,插入把c旋转到根,c+1旋转到根的右边,然后直接插入到c+1的

2014-12-12 20:35:14 372

原创 POJ3481 Double Queue (Splay)

题意:给出三种操作,1表示加入一个值和一个优先级,2表示找到最大优先级的数的值并输出,然后去掉这个数,3表示找到最小优先级的值并输出然后去掉。。。Splay的模板,写的时候除了一点问题,这里涉及到了插入和删除操作,插入按平衡二叉树的操作就差不多了,删除的时候先把要删除的移动到根节点,然后找第一个比根节点优先级小的数(如果没有直接删掉这个节点,把根节点右移下就好),然后把那个数旋转到根节点的左节

2014-12-09 15:45:42 445

原创 HDU1754 I Hate It (Splay)

题意:中文题。。。以前用线段树写过。。现在学Splay,也来写一下。。用伸展树来进行单点更新和区间查询,单点更新就直接查选第k个直接查选到这个点然后再维护上去就可以了,,区间查选,因为这里是闭区间,所以要先把区间扩大一下(自己用手写下就知道),然后第k个找到左边界的点,旋转到根,找到右边界的点旋转到根的右子树,然后右边界的点的左子树就是要找的答案了。。#include#include

2014-12-08 19:12:47 346

原创 HDU3157 Crazy Circuits

题意:放电路,告诉每个东西要正常工作的最低电流,问最小要从正级走出多少电流。。有源有汇上下流求最小流。。。s,t表示原图的源点汇点,ss,tt表示加上的超级源点超级汇点。。先按一般无源无汇的流建图,然后不加t->s这条边,从ss到tt跑一遍最大流,记录下来,然后加上t->s,在跑一遍最大流,再记录下来,两者相加要等于可行流(ss出发的容量之和),不等于就不行了。。。相等的话,t->s那条边

2014-12-04 21:30:39 345

原创 ZOJ3229 Shoot the Bullet

题意:一共有n天,m个妹子,一个人至少要给第i个妹子排Gi张照片,他第i天只能拍di张照片,只能给ci个人拍照,问是否能完成任务,能完成最多能拍多少张照片,第i天给按顺序输入的妹子排几张。。上下界网络流,先要知道怎么求无源无汇网络流(不说了)。。。这题先就简单的按照题意建个图出来,连起t->s(无源无汇),然后加上一个超级源点,超级汇点,然后按照一般的无源无汇网络流建图,跑一遍,判断一下是

2014-12-04 18:13:27 388

原创 HDU4819 Mosaic

题意:给出一个n行n列的矩阵,每次询问一个二维区间,找出区间内最大值和最小值,去它们平均值,然后输出,再插入那个点。也是裸裸的二维线段树,太渣。。写了好久,更新的那个地方出了问题,第一层树也要找到准确位置才更新,不是准确位置就从下面更新过的树维护上来。。#include#include#include#define ls (k<<1)#define rs (k<<1|1)usin

2014-12-04 09:29:53 362

原创 HDU1823 Luck and Love

裸裸的二维线段树,二维线段树的入门题,写的树套树,以前觉得很难,现在发现不是那么难了。。。强转注意精度问题,程序最后有组数据,应该输出-1。#include#include#include#define ls (k<<1)#define rs (k<<1|1)using namespace std;const int MAXN=1010;struct Sub_Tree{

2014-12-03 19:38:37 335

原创 POJ2375 Cow Ski Area

题意:给出一张地图,一只牛可以从高度大的地方走到高处小的地方,高度相同的地方随便走,问最少连接几个块,可以使牛从任何一个点走到任何一个点。。强连通,建图很简单,就是同样高度建个双相边,有高度差是单向边(高度大到高度小),然后tarjan缩点,然后统计缩点之后每个点的入度和出度,统计出度为0和入度为0的点,取这两个中的最大值。。。如果强连通分量只有一个,整张图都是连通的,输出0。。然后就是R

2014-12-01 18:44:21 361

原创 HDU3949 XOR

题意:求出从一堆数从任意取出几个的第k小(去重)。。。利用高斯消元求出他能组合成的数,然后用输入的数按位去比较,对于每一位选或不选,选的话就把这个数异或上去,然后就是答案了,注意如果消元后行数比原来少了,就说明可以异或出0.。#include#include#includeusing namespace std;typedef long long ll;const int MAX

2014-12-01 09:11:35 372

原创 BZOJ2115 Xor

题意:找一条从1-n的路径使路径上的异或和最大。。。高斯消元。。。。如果当前走的这条路径上走不到n,也就是说后面还要走回来,也就是同样相同的数走了两遍,所以异或出来的值就是位0,能够改变异或和结果只能通过环了,所以记录下所有环异或的大小,任意找一条从1到n的路径,记录下来(如果有多条路径,那么一定成了一个环,这条路的值异或一下环的值也就成了另一条路的值)。。。所以用dfs找下环,并且记

2014-11-30 21:05:28 417

原创 HDU4081 Qin Shi Huang's National Road System

题意:给出n个城市的坐标和人口,两个间的距离是欧几里得距离,可以免距离连接一条路径,要是免费连的那两个城市的人口比上生成树的距离比值最大。。次小生成树,先求出最小生成树,然后枚举生成树上每一条边,把他去掉,就形成来两个连通块,从两个连通块中分别找到人口最大的城市,免费连接起来,所以就是这两个人口加起来比上去掉一条边的最小生产数的权值,可以在求最小生成树时把生产树上的边存起来。。。吐糟下。。

2014-11-27 21:51:57 362

原创 HDU4099 Revenge of Fibonacci

题意:给出一串数字,他可能是Fibonacci数的开头,也有可能不是,是的话输出他的编号(具有这个前缀最小的编号),比如编号0是1,编号1也是1,编号2就是2,编号3就是3.。编号4是5.。不是输出-1.。。trie+高精度加法。。可以从样例看出Fibonacci数的值一定很大(样例都快到第5W个Fibonacci数了),但是题目最多输入的前缀长度小于40所以,对于字典树来说后面的很多位数都能

2014-11-25 21:13:00 350

原创 HDU4472 Count

题意:给出n个点,组成一棵数,树的每一层的节点的叶子节点的个数要相同,问有多少个满足条件的数。。DP,对于n个节点,先分离出一个节点当做根节点,然后假设它有i个孩子,如果(n-1)%i==0,这就说明他的孩子可以平均分配到i棵子树中去,所以数量就加上这棵子树的数量。。。所以状态转移方程:if((n-1)%i==0)   dp[n]+=dp[(n-1)/j]....这些前面都打表处理掉就好。

2014-11-25 18:47:41 358

原创 HDU4465 Candy

题意:有两个箱子,里面放有相同数量的糖果

2014-11-25 09:58:33 527

原创 HDU4804 Campus Design

题意:给一张地图,可以放

2014-11-23 16:45:24 518

原创 ural1519 Formula 1

题意:求一些格子不能经过,可以经过的格子要经过的回路个数。。插头DP入门题。。

2014-11-23 14:07:26 328

原创 HDU3652 B-number

题意:给一个数字,问有多少个小于等于

2014-11-20 11:46:13 393

原创 HDU4800 Josephina and RPG

题意:给C(m,3)个队伍之间取胜的概率,然后获胜了可以选择与对手换队伍,也可以不换,问最大的胜率

2014-11-18 19:30:59 393

原创 HDU4791 Alice's Print Service

题意:打印纸张,大于多少份多少钱一张,价格是非

2014-11-16 22:36:30 423

原创 HDU1693 Eat the Trees

题意:不经过为0的格子(1的格子都要经过),问能形成几个环。。

2014-11-15 11:16:51 304

原创 Codeforces Round #277 (Div. 2)

A题。。。水题。。#include#include#include#define ll __int64using namespace std;int main(){ ll n; while(scanf("%I64d",&n)==1) { if(n&1) { ll ans=(ll)n/(ll)2-n; printf("%I64d\n",ans); }

2014-11-12 12:25:42 448

原创 ZOJ3471 Most Powerful

题意:有n个原子,每两个原子碰撞就会 产生能量,并且一个原子

2014-11-11 18:27:48 484 1

空空如也

空空如也

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

TA关注的人

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