自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 可持久化数组学习笔记

推荐先阅读:可持久化线段树学习笔记一、定义:可进行修改,并支持如下两功能的数组:1.在某个历史版本上修改某一个位置上的值2.访问某个历史版本上的某一位置的值二、原理:如果你已经学会了可持久化线段树(我就当你会了,不会见题头),会发现其实可持久化数组已经包含在主席树中,或者说借主席树实现的建树与修改操作与主席树完全相同:通过共享节点最小化空间查询时直接在...

2019-07-25 13:11:00 121

转载 可持久化线段树(prizident tree)学习笔记

一、定义:“可持久化”定义:可以支持回退,访问之前版本的数据结构;     主席树:可以访问未经过其他操作的版本的线段树二、原理:主席树与线段树的基本操作相同,唯一的难点在于如何实现可持久化。如果想要访问每个版本的线段树,首先想到的是对线段树进行全盘复制,然后在上个版本的基础上进行本次操作以建立新版本。但很显然如此一来空间复杂度会直接窜到O(n*m),显然不可行考虑操...

2019-07-25 13:00:00 154

转载 [六省联考2017]期末考试

T3 期末考试思维题题目读着就很摸不到头脑,不知道该用啥算法,但想想暴力反而能找到灵感。这题暴力该怎么写?这个问题就很难想,该枚举的是什么?再读几遍题,很容易想到的是,最小不愉快度的决定因素,是所有成绩都出来的时间。那么如果给定一个时间值,规定所最后一门成绩在这天前出完,是否可以求出最小不愉快度呢?显然可以now表示天数,求不愉快度方法如下:ll ans=0,...

2019-06-05 17:33:00 147

转载 [SDOI2010]大陆争霸

带限制的dijkstra,由题意得,每个城市的实际最早进入时间=max(最短路,所有结界点城市的最大最短路)考虑实现,我们可以记录每个点的入度或是哪个城市保护哪个城市,在维护到某点时判断是否可以进入。若不能进入则continue,能则判断进入该城市后可以解锁哪些新的城市,再将新城市更新压入队列。不同的操作很多,怎么写都行。时间复杂度O(nlogn)#include<...

2019-06-05 17:32:00 101

转载 [SDOI2016]排列计数

顺着题面来推,长度为n的数列中有m个位置不变,相当与求从n里选m个的组合数。剩余可变的位置相当于求错排。数据范围n≤1000000,不能递推求组合数,可以直接公式计算,但同时要求逆元来支持取模运算。因此需要递推求最大范围内的组合数和错排,两者都是线性的,所以时间复杂度都是O(1000000),每读入一组数据直接公式输出就行。#include<cstdio>...

2019-06-05 17:31:00 103

转载 NOIP2011 D1T2 选择客栈

用时:20 min 时间复杂度:O(kn)还算是比较简单的一道题,先看部分分,发现暴力可以拿50。暴力的做法是枚举每个合法咖啡店左右两端相同颜色的客栈。考虑优化,由于本题中每个合法点都对答案造成影响,很容易想到维护某种前缀和。而从输入过程中每个点的影响,无论该点是否合法,该点上的客栈都对答案做出贡献(可为 0 ),需要知道的是离该点最近的合法点的位置前与该点颜色相同的点数...

2019-05-29 22:25:00 126

转载 NOIP2014 T1*2

D1T1 生活大爆炸版石头剪刀布用时:10min 复杂度:n简单模拟,照题意打表即可#include<cstdio>using namespace std;int aka(int a,int b){ if(a==b) return 0; else { if(a==0&&b...

2019-05-20 22:36:00 80

转载 NOIP2012 T1*2

D1T1 Vigenère 密码(一次ac)用时 20min  复杂度 n一道字符串模拟,给出密钥用一套简单的密码对应表把密码还原,只需要注意字母的范围。因为不太熟悉字符的ASCII码搞的时间有点长,ASCII码的优点是可以把字母大小关系转化成数字进行处理,而且不必考虑字母的大小写。呆马:#include<cstdio>#include<al...

2019-05-19 21:53:00 85

转载 五一集训——图论

概念1.简单图:没有重边和自环的图2.有向/无向/混合:不解释了3.点的度,入度,出度(入边,出边)4.一条只出现一次的路径叫简单路径5.cycle(简单环,复杂环)6.无向图中两节点可互相到达,则这两点连通7.有向图中一点可到达另一点:可达(反着不行)8.任意两点都可达的无向图:连通图9.有向图任意两点可互相到达:强连通10.有向图的有向边替换为...

2019-05-01 16:52:00 114

转载 五一集训——语言基础

基础乱七八糟程序运行:CPU只负责计算 内存存储变量和常量CPU的位(32/64)每一位为一个bit(最高位为符号位,1表负数,0表非负数)语言基础计算机中的整数表示int:正负2的31次方自然溢出:无符号溢出后从头起始long long(long long int) 64位  short 16位   char 8位   bool 1...

2019-05-01 10:26:00 91

转载 luogu P2381 圆圆舞蹈

模拟T3(T2找不到原题)维护当前枚举到的区间是l到r,通过前缀和计算顺时针距离,如果超过周长的一半,l++,否则r++,同时维护答案。可证这样做不会计算任何重复的区间,且会不断向答案转移,而且时间复杂度是O(n)的呆马:#include<cstdio>#include<algorithm>using namespace std;typ...

2019-04-21 17:22:00 103

转载 luogu P1843 奶牛晒衣服

模拟T1,贪心+排序或者二分都行贪心策略很好想,显然每次晒耗时最久的衣服最优,问题是要在每次晒完后都再次找到耗时最久的衣服,不能每次都sort,所以单调队列或者大根堆二分也不难,直接二分时间,筛一遍衣服统计需要烘干的时间然后判断是否满足就行模拟的时候敲了贪心+排序,所以这里放二分的代码(滑稽),个人感觉贪心更好写#include<cstdio>#inc...

2019-04-21 17:06:00 136

转载 luogu P1342 请柬

dij板子的灵活运用在一个有向图中求:1.1号点到剩下所有点的最短路 2.剩下所有点到一号点的最短路1相信谁都会,存有向图跑一遍2是这道题的精髓,应用一个比较有价值的思想:在有向图中跑反向边,相当于求出所有点到一号点的最短路所以简单说就是存两个版本的图然后两遍dij板子#include<cmath>#include<cstdio>#...

2019-04-20 20:30:00 193

转载 [USACO09OCT]热浪Heat Wave

最短路的蒻弱化版,借着练了一遍dij堆优化的板子,放一个dij的标程在这吧。(真心感觉dij比某个已死算法敲着简单)堆优化部分:struct node{ int u,v; bool operator <(const node &b)const { return u>b.u; }};pri...

2019-04-20 19:46:00 140

转载 NOIP 2002 矩形覆盖

当年的一道D2T1,一眼看上去很简单的样子,但是实际做起来没那么容易。看一眼数据范围,很好可以考虑搜索,首先想到的是搜什么。如果从矩形开始搜,虽然至多只有4个矩形,但是可以有很多很多很多种的组合。因为一个矩形要么由对角线上顶点确定,要么由一个顶点与不包含该顶点的两边上的各一点确定,这样搜索会有2500^4种情况显然会炸。那么考虑从点开始搜,点能怎么搜呢?依次考虑能把它放到哪个...

2019-04-19 22:09:00 124

转载 NOIP 2000 单词接龙

看到很久的一道题,敲起来略麻烦一直咕到现在。解法很水深搜+回溯就行每次枚举所有单词判断是否出现过两次以上,是否能接上,接上长度是多少,是否重叠就可以,当没有能接上的单词表示已搜完维护答案最大值即可。#include<cstdio>#include<cstring>#include<algorithm>using namesp...

2019-04-18 22:22:00 124

转载 luogu P1354 房间最短路问题

火焰之地传送门凭心而论这题挺水的,一道计算几何加工的最短路。用前面墙的个数*4+当前墙上的序号表示点的序号,对于每个点(包括起点和终点),枚举其后面墙上的所有点一一判断是否可与之相连,能相连就连边,最后跑一遍Floyd。判断直接用数学公式做一次函数就行。呆马:#include<cstdio>#include<algorithm>#i...

2019-04-16 21:45:00 411

转载 luogu P1417 烹调方案

稍微改了一点的01背包,选择的顺序会影响物品的价值,数学公式推一下可以得出cmp函数:bool cmp(node x,node y){ return x.c*y.b<y.c*x.b;}排序后跑一遍01就行#include<cstdio>#include<algorithm>#define maxn 60#...

2019-04-16 11:05:00 86

转载 NOIP 1999 旅行家的预算

月光林地传送门最近打算刷刷NOIP原题,这是第一道,贪心+模拟(+递归),优先队列也能做。贪心思路炒鸡简洁:对于当前所处的加油站,枚举统计出所有可以抵达的加油站,记录油价最低值。若最低值小于当前加油站油价,则在当前加油站加上正好可以到达那个加油站的油。若最低值大于当前加油站油价,判断能否从当前加油站直达终点,能就直接去,否则加满油到最低值加油站。正确性证明:最低值小于...

2019-04-13 21:54:00 134

转载 luogu P2419 [USACO08JAN]牛大赛Cow Contest

神奇的floyd对于每组给定的 a 和 b 可推知a相对b的大小关系,若想得到a在所有数中的排名则需满足已知n-1个这种大小关系。若a比b大,且b比c大,可推知a比c大。那么使用floyd,可以枚举出所有的a b c组合,若满足a比c大或上述条件(mp[a][c]|mp[a][b]&mp[b][c]),则说明a与c的大小关系已知。跑一遍之后统计时,循环两层1到n...

2019-04-12 21:48:00 90

转载 luogu P1119 灾后重建

接近弗洛伊德板子,唯一的不同点是对每组 i j k 特判一下在给定时间内三点间的道路是否修建完成。而且由于给出的t都单调不减,那么显然在询问较大的t时,比其更小的t时的状态已经维护过一遍,因此可以记录维护时间的最大值。每次询问时用while(sign<t)来限制即可保证只考虑该t下已修好的道路。复杂度为O(n^3)// luogu-judger-enable-o2...

2019-04-12 21:40:00 60

转载 [国家集训队]跳跳棋

给这道题跪了......棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移动成x,y,z。(棋子是没有区别的)跳动的规则很简单,任意选一颗棋子,对一颗中轴棋子跳动。跳动后两颗棋子距离不变。一次只允许跳过1颗棋子。对于一种位置状态 a b c因为一次只允许跳过一个棋子可知如果中间的棋子如果不是三个棋的中点,则必定只有一种跳法使左边或右边的棋...

2019-03-27 20:43:00 191

转载 洛谷P4147 玉蟾宫

继续悬线法,参考上一篇博客可以秒切代码:#include<cstdio>#include<algorithm>#include<iostream>#define maxn 1010using namespace std;int le[maxn][maxn],ri[maxn][maxn],up[maxn][maxn];...

2019-03-25 23:02:00 98

转载 [ZJOI2007]棋盘制作

悬线法,用来解决给定矩阵中满足条件的最大子矩阵。首先对于矩阵中每一个点,分别向左向右维护合法的最大范围。之后对于每个点,与上一排比较,如果和它上方的点满足条件,就取两排中包含这两个点的最大横区间,最大纵区间递归+1.代码如下#include<cstdio>#include<iostream>#define N 2010using n...

2019-03-25 22:41:00 71

转载 树状数组模版

树状数组是一种类似于线段树的数据结构,它的功能主要借助于三个函数(也可以说是两个)来完成:1.lowbitint lowbit(int k){ return k & -k;}用来计算二进制位数,之后的两个函数都会用到。2.add(单点修改、区间修改)void add(int x,int k){ while(x<...

2019-03-24 14:48:00 63

转载 Nearest Common Ancestor

POJ上的题,其实就是LCA板子。先预处理每个点倍增祖先,然后每组询问先使x和y达到同一深度,然后一起往上跳到公共祖先的+1深度的点。die码:#include<cstdio>#include<algorithm>#define maxn 500010using namespace std;int head[maxn],nxt[maxn...

2019-03-22 17:50:00 131

转载 P1260 工程规划

差分约束板子差分约束:把 i - j >= x 操作等价于从 j 到 i 连一条边权为 x 的边。然后跑一遍spfa统计最短路,即为一组合法序列。这道题里要求以一个点为基准点 0 ,在跑完spfa之后统计最小的dis值,然后按顺序输出dis值减去这个最小值即可。另一个问题是图不一定连通,有两个解决方法:1.建一个万能点与所有的点相连,当然边权都是0.2.跑spf...

2019-03-14 22:45:00 234

转载 树链剖分详解 luoguP3384【模板】树链剖分

一:用处  对一棵树分成几条链,把树形变为线性,减少处理难度  需要处理的问题:    1.将树从x到y结点最短路径上所有节点的值都加上z    2.求树从x到y结点最短路径上所有节点的值之和    3.将以x为根节点的子树内所有节点值都加上z    4.求以x为根节点的子树内所有节点值之和二:相关概念:1.重儿子:对于每一个非叶子节点,它的儿子中以那个儿子为...

2019-03-04 23:48:00 81

转载 luogu3月月赛T2 回忆京都

京都传送门这题emmm怎么不管瞎搞只要维护下前缀和就能过,感觉并没有T1难,细节除了取模常规操作也没啥别的。一次切很快乐(滑稽)组合数怎么瞎搞都行(lucas除外),然后二维前缀和维护一波即可。代码如下:#include<iostream>#include<cstdio>#include<cmath>#include...

2019-03-02 21:59:00 81

转载 luogu3月月赛T1 整数校验器

铁炉堡传送门模拟,可以分成两部分:1.是否合法2.是否在范围内做法思路很简单1:排除两个不合法形式即可:开头为0的只能有1位,不能是单个的 ‘ - ’ 。2:也好想,题中给出的最大范围是long long 上限,超long long的直接输2continue,剩下的转成数的形式比较一下。问题在于做部分1时,数据是字符串形式,怎么把它转成整形并判断是否...

2019-03-02 21:34:00 91

转载 点分治学习笔记

银月城传送门集训day9上午各种神仙分治真心听不懂,自己颓着把点分治学了,简单(并不)写一下再加深一下理解吧。一、点分治是个啥点分治是通常用来处理树上路径统计问题的一种分治方法。尤其适用于大规模的数据处理。时间复杂度最高为O(nlogn)。例如求树上两点间距离,点分治就远优于dfs求两点距离(O(n^3)复杂度)二、点分治的实现原理以求树上两点路径为例子,...

2019-02-18 15:14:00 99

转载 Luogu P4247 [清华集训]序列操作

火焰之地传送门 祭第五道黑题叫序列操作的题怎么都这么恶心coding30min,debug三小时,线段树你值得拥有太久不写博客了,本来想集训完回家再一起写,但是de了线段树的bug真的敲不动主席树了,写(水)篇题解吧。题意如下:给定一个长度为n的序列。有m次操作,操作分为:1.区间加;2.区间取负;3.询问区间中选c个...

2019-02-16 21:25:00 118

转载 luogu P2300 合并韩雨辰神犇

月光林地传送门一道简单dp....(不知道是什么dp)状态很简单,但要分为三个数组表示:dp[i]表示区间1——i至少合并的次数sum[i]表示前缀和last[i]表示第i个数显然要从左边开始推,当右边加入一个新数时,在保留前j个数不变并合并合法的条件是sum[i]-sum[j]>=last[j]想想看,如果后加入的数与前面数的差比前面最后一个数小,那么...

2019-02-01 20:22:00 102

转载 P1131 [ZJOI2007]时态同步

大漩涡传送门标签是树形dp,但其实没啥必要用dp。显然数据给出的是树形结构,要求所有叶子节点到根节点路径长度相同,可以想到自下向上地进行维护。首先从根节点dfs,找到叶子节点后向上回溯,先维护父节点的所有子节点到父节点最大边权。然后维护ans,ans为最大边权减去所有到子节点的边权。因为边权只能增大不能减小,用时短的节点必须等待用时长的节点。然后维护父节点的边权,父节...

2019-01-31 09:17:00 127

转载 luogu P3047 [USACO12FEB]附近的牛Nearby Cows

银月城传送门树形dp+1状态好想得不得了:定义f[i][j]为i点在j步以内的所有奶牛数转移方程的初步形式也很容易得出来:f[i][j]=sum(f[s][j-1])但是这样会有一个问题,如果j>1,对于每个子结点s,都有继续向下推下去,但这样显然会重复累加一些边。所以需要减去重复累加的边:f[i][j]=sum(f[s][j])-(f[i][j-2]*(子结点...

2019-01-30 16:28:00 100

转载 luogu P3205 合唱队

银月城传送门又一道区间的dp。状态dp[i][j]表示队列中i——j可行的排列方法。首先定义边界:对于每一个点,dp[i][i]=1(显然)然后导一下状态转移方程,大区间必然由小区间转移而来,但是转移方法可以有多种。完成区间排列的最后一步,既可以由在左边插入i完成,也可以通过在右边插入j完成。方便判断,在状态上再加一维,即dp[i][j][0/1],最后一维为0则从左...

2019-01-30 16:13:00 65

转载 luogu P3146 [USACO16OPEN]248

不稳定的传送门基础区间的dp题状态很容易得出:dp[i][j]表示区间i——j可以合成的最大数。状态转移方程很显然:if (dp[i][k]==dp[k+1][j]) dp[i][j]=max(dp[i][j],dp[i][k]+1)那么只需要先枚举结点,在以该结点为中心向两边枚举长度即可,但一次循环不能保证所有数据都正确,因为后得出的区间可能更新前得出的区间。为了解...

2019-01-30 09:09:00 124

转载 luogu P3174 毛毛虫

铁炉堡传送门一道树状dp,在处理子问题上的做法真的就是单纯的标准dfs树状dp。从叶子节点向上枚举可以得到每个节点的最大子树,但这题的问题在于,没有给出根节点,而且每个节点都可以作为根节点。那么我们只需要枚举每个结点作为根节点时的情况。在每种情况中,遍历与根结点相连的结点,求出以该节点为根节点的最大子树。此时我们先选定的结点可能连着多个子树,但是我们只能选择一条链,所以选择最大的...

2019-01-29 21:35:00 109

转载 P3386二分图最大匹配模版

传送门声明几个定义:1.二分图对于一个图G=(V,E),若能将其点集分为两个互不相交的两个子集X、Y,使得X∩Y=∅,且对于G的边集V,若其所有边的顶点全部一侧属于X,一侧属于Y,则称图G为一个二分图。2.二分图匹配对于一个二分图G的子图M,若M的边集E的的任意两条边都不连接同一个顶点,则称M为G的一个匹配。3.最大匹配对于二分图G的一个子图M,若M为其边数...

2019-01-21 10:41:00 111

转载 P4779单源最短路径(标准版)

应用的是dijkstra算法,这种算法的思想类似于贪心。首先,将所有点分为已知最短路和未知最短路两类。开始时,只有出发点的最短路已知,为0,其余点都标记为正无穷。我们要求出出发点到所有点的最短路径,因此进行点数轮循环,每轮循环中,遍历与已知点间有边相连的点,更新与出发点的最短路径。然后从所有更新的路径值中选出最小值,将对应点加入已知最短路径类,循环操作即可。还有一点,就是选最小值...

2019-01-21 09:12:00 161

空空如也

空空如也

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

TA关注的人

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