自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SPOJ-COT Count on a tree(主席树 + LCA)

链接:https://www.spoj.com/problems/COT/en/题意:给一颗树,每个点有对应的权值,每次查询形式为 u,v,k ,询问u到v的链上的第k小值是多少分析:这道题就是一个主席树加上求u,v的LCA,主席树的建树,每个点以其父亲节点为基础建的,然后对于每次查询答案,先找到u,v的LCA,做一下差分,基本上是主席树的模板了。LCA是用树剖的方法求的,感觉比较好写,时...

2018-09-07 20:45:24 450

原创 HDU 5052(树链剖分+线段树)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5052题意:树上每个点有一个权值对应商品价格,每次查询两个点之间的路径,从X走到Y,可以选择在一个点买入商品在另一个点卖出商品(卖出点一定要在买入点的后面),并且每次走过这条路径后,这条路径上的所有点的商品价格都会上涨V。对每个查询求出从走到Y所能获得的最大收益(不小于0,可以选择不买入)。分析:这...

2018-08-31 15:49:28 335 3

原创 HDU 5029(树链剖分 + 线段树 好题)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5029题意:有一颗树,每次对树上两个点之间的路径用一个值进行标记,m次操作后,问每个点被哪种标记标记的次数最多。分析:树剖没有什么难度,主要就是线段树,一开始想怎么维护每个点被哪些标记标记过和被标记最多的是哪种标记,但是由于标记种树最大是1e5所以没有什么好的方法。看了大牛的博客才想到建一棵类似于权...

2018-08-31 10:53:30 441

原创 HDU 6430 TeaTree(预处理+dfs /线段树)

题目链接:我是链接!!题意:给一颗以1为根节点的树,每个节点有一个权值,计算每个节点以当前节点为最近公共祖先的节点对gcd中的最大值。分析:数据量是100000,如果两两枚举计算的话不管怎么样是肯定会T的,所以从每个数考虑。预处理出每个数的所有因子,最大数为100000,每个数的因子数不会大于400个。根据每个节点的权值,可以得到每个节点的因数集合。然后进行dfs,将每个节点的因数集合与它...

2018-08-23 16:54:47 450

原创 POJ 3237(树链剖分 + 线段树)

题目链接:我是链接!题意:在一棵树上,点和点之间的路径有边权,有三种操作 CHANGE把第i条边的权值改为a,NEGATE把第a个点到第b个点的边的权值全部取相反数,QUERY求第a个点到第b个点的最大边权。分析:树链剖分的模板题了,之前写的用树状数组维护就可以了,这次稍微复杂一点用线段树+懒操作来维护。但是考虑到需要加lazy标记,所以除了区间最大值以外还需要维护一个区间最小值。然后每次...

2018-08-18 14:58:15 468

原创 UVALive 7427 Elementary Math(二分图)

题意:给你n对二元操作数,可以对任意一对操作数进行 + 、-  、* 三种中的任意一种操作,组成一个算式。要求最后这n个算式得到的n个答案没有重复的,问是否可能,可能则输出方法,否则输出impossible。分析:每个一对操作数能进行算种操作,一开始想能不能看每个答案被访问了几次然后乱搞一下,但是没有什么办法。就感觉是一个二分图匹配问题,将操作数对和答案之间连边,然后跑一个匈牙利,就过了。因为...

2018-08-04 10:27:06 173

原创 HDU 6315 Naive Operations 多校2(线段树)

这道题暴力写了一个线段树过的,本来觉得线段树维护会T就想离线操作一下,但是无奈没有什么思路,最后就暴力撸了线段树。线段树的每个节点维护几个值,lazy表示在这个节点对应区间内应该add的分母值但是还未向下传递,minn表示还需要最少向下传递多少累加值,才能导致某个点的a/b增加1,sum值表示当前整个区间内的和,这个由叶子节点维护,逐层回溯的过程中保证每次查询之前的值一定是已经维护好的值。每次...

2018-07-26 16:15:20 162

原创 POJ 2104 归并树

这道题有很多做法,很多人都是用主席树的板子写的,这两天刚好学了一下归并树,就决定用归并树来过一下这道题。和普通线段树不同的地方在于,每个节点存的不是一个值,而是一个数组,就是把归并排序的中间过程保存下来了。对于每一次查询,二分已经排好序的数组,判断数字x在被查找的区间中有几个数字比他小。query函数的区间查询操作基本跟线段树的查询操作没有区别了,就是用upper_bound来判断在当前区间小于x...

2018-07-19 20:59:50 164

原创 HNOI 2002 营业额统计 入门Splay

题意:题意简单的说就是给一个数列,对于每一个数,用在它前面出现的数与它做差,找到对它来说最小的差,答案就是把每一个数的最小差相加。第一个数的最小差是它本身。分析:这几天在练Splay(感觉自己太菜了),用splay来解决这个问题,维护一颗平衡树,然后依次插入,每次插入找到它的前驱和后继,得到每个数的贡献,最后相加算出答案。最最最简单的Splay应用,然而我还是调了很久的bug,不过没有照着板子

2018-03-03 16:45:51 219

原创 POJ 3481 Double Queue(treap)

题意:模型大概就是维护一颗平衡树,每次插入会给客户的标号和优先级,查找输出优先级最大或者优先级最小的客户,并且将其从树中删除。分析:treap最基础的运用代码:#include #include #include #include using namespace std;const int N = 1000000+5;struct node{ int p,k,ra

2018-01-25 20:36:09 374

原创 HDU 2196 Computer(树形DP)

题意:给出一颗树,对每个点求出到其它点的最长距离。分析:进行两遍dfs,题意说明数组大的点连在数字小的点上,所以可以看成一颗以1为根节点的树。第一遍dfs求出每一个节点到它所有儿子节点中的最大距离和次距离,分别用sd[i][0]和sd[i][1]记录下来,同时记录最大距离所连儿子节点的序号。第二遍dfs的过程在计算一个点的答案时,先要算出它经过它的父节点的路径中最长的一条的长度,然后分情况

2018-01-24 13:59:16 172

原创 2017 ACM-ICPC西安现场赛 J题LOL(暴力)

题意:输入五个长度为100的01串,从每个串中选择一个是1的位置,任意两个串中选择的位置不能相同,一共有多少种情况,答案乘以常数531192758再对1e9+7取模。如果对五个串都dfs复杂度是10^10稳T,所以对前四个串dfs,最后一个串的贡献直接加到最终的答案上。dfs的参数分别是第x个串和第五个串中是1的位置有sum个还没有被选择。代码如下#include #incl

2018-01-22 10:42:41 2064

原创 KMP两种写法以及AC自动机失配数组间的区别

第一种 KMP这一种是没有优化过的KMP,当第i位失配(模式串与文本串相应字符不同),需要使用的是next[i -1],该数组所存数据的意义是,与第i位字符有最长相同前缀(且不包括本身)的字符的位置。假设next[i-1] = j(j 第二种KMP这种KMP是在第一种KMP的基础上的一个优化,当失配时能够更快的找到合适的位置进行匹配。在这种方法当中next数组(失配指针数组)相较于第一

2017-08-20 13:25:14 532

原创 HDU1255 线段树+扫描线

题意:n个矩形求出被两个以上矩形覆盖的面积之和#include #include #include #include using namespace std;#define ld d<<1#define rd d<<1|1const int N = 2005;double y[N<<2];struct seg{ double x, y1,y2; int fl

2017-08-18 15:31:04 181

原创 POJ 1177 线段树+扫描线

题意:有n个矩形,每个矩形给出它的左下角和右上角的两个点的坐标,要求所有n个矩形在平面中组成的图形的总周长。分析:用线段树记录坐标系上,与y轴平行的方向覆盖的长度和连续的区间个数。记录矩形的每一条垂直(与y轴平行)的边,按照x从小到大排序。左边的边加入线段树,右边的边移除线段树,计算总周长。#include #include #include #include using name

2017-08-18 09:30:45 316

原创 HDU 4614 线段树+二分

一开始做用自己的方法,一直WA,自己也出不出错误的例子,放弃了自己的代码,看了一下别人的方法都是线段树+二分,逻辑很清晰,也很好写,基本就是板子。#include #include #include #include using namespace std;struct node{ int sum,lz;}a[50005 << 3];void build(int d,

2017-08-16 10:37:46 324

原创 poj 2352 treap

题意:先按Y的升序然后再按X的升序给出坐标,求出每个坐标左下方有多少个点,最后输出有从0到n-1个点的坐标有多少个。分析:本题可以看成是 树状数组的入门题,但是用treap同样也可以解决。由于坐标是按照y递增的顺讯输入。所以不需要记录、处理y坐标,对x坐标维护一个treap,对每个节点维护一个总节点数sum。 虽然没有完全相同的两个点,但是x坐标可以相同,所以储存一个当前节点的个数val,最后

2017-08-12 14:41:31 215

原创 poj 1442 treap

题意:给定M个数,每次可以插入序列一个数;再给N个数,表示在插入第几个数时输出一个数,第一次输出序列中最小的,第二次输出序列中第二小的……以此类推,直到输出N个数分析:先记录下要插入的节点,另开一个数组记录要查询的状态。用treap维护,每个节点维护一个子节点的总数sum,查询的时候只要按照sum值进行查询就可以了,注意insert和rotate的时候更新节点的sum。#include

2017-08-12 13:06:25 256

原创 hdu 4280 最大流+优化

一开始没有用当前弧优化T了几发,然后改了又接着T。在vj上一直T,在HDU上倒是过了,也是迷。 然后把bfs里的stl改成手动队列,在vj上也过了。不过dinic不是这道题比较好的方法,只是刚好能卡过去。#include #include #include #include #pragma comment(linker, "/STACK:1024000000,1024000000")

2017-08-02 09:59:20 385 1

原创 多校3 hdu6060 RXD and dividing

先记录每个节点与哪些节点相连接,把1当做根节点dfs一遍找到每个节点有多少子节点(包括子节点的子节点),并记录当前节点与其父节点连边的权值。枚举2—n节点,计算其于父节点连边的贡献,相加得到答案。#include #include #include #include #include #include #define mod 1000000007using namespace s

2017-08-01 19:54:54 196

原创 2017 多校2 c题(水题 贪心)

题意:给你a、b两个长度为n的数组,要求在a数组后填入你n个数组,要遵循ai≤max{aj-j│bk≤j#include #include #include #include using namespace std;int n;long long mod = 1000000007;const int N = 500000+5;int c[N];int b[N];int

2017-07-27 17:00:24 216

原创 2017多校1 b hdu 6034

记录每个字母在每个位数出现的次数,直接用结构体记录并排序可能会超时,再建一个新的数组来排序。找出一个没出现在首位(单字母除外)的字母,其它按排序赋值#include #include #include #include using namespace std;const int N = 100000+10;const int mod = 1000000007;int alp[26

2017-07-26 13:22:34 274

原创 2017 多校 水题

首先预处理每个数的因数有哪些,然后#include#include#include#include#include#include#include#include#include#include#define mod 1000000007#define INF 0x3f3f3f3fusing namespace std;int n,m;const int N = 100

2017-07-25 19:50:01 324

空空如也

空空如也

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

TA关注的人

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