自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 codeforces 893F 主席树||线段树合并

题意:有一颗树,树上每个点有给定点权,有m次询问,每次询问点x的所有子树中,与x的距离小于等于k的所有点的点权最小值是多少。题目要求强制在线。思路:主席树解法:按照dfs序在树上建立主席树,询问是查询x节点的管辖的那段区间,属于经典操作,问题在于如何控制距离小于等于k,于是我们可以按照点的深度来建主席树,虽然最小值问题不满足前缀相减的性质,但实际上我们并不需要减掉1到dep[x]这段区间,...

2019-09-05 23:21:17 195

原创 HDU6625 01字典树乱搞

题意:给你两个数组a和b,让你安排a和b的顺序使得a数组与b数组一一对应得到的异或数组c字典序最小思路:建01字典树暴力跑最优匹配即可,借鉴标程思想写了一份AC代码,将两个数组建到一颗字典树上,用num数组维护当前节点是否可用,这样便使得删除操作非常容易实现,在匹配的时候利用dfs的性质去暴力匹配即可,复杂度nlogn代码如下:#include<bits/stdc++.h&gt...

2019-08-13 21:32:12 118

原创 牛客寒假算法训练营2 处女座与宝藏(2-sat)

为了补这道题专门花了一下午学了2-sat理论倒是好懂,就是建模方法想了很久,发现一篇很好的博文,直接贴过来好了。----------------------------------------------------------------------------------------------------模型一:两者(A,B)不能同时取那么选择了A就只能选择B’,选择了...

2019-07-23 14:04:36 293

原创 不太强的线段树区间更新模板

由于每次比赛线段树都是手写的,风险较大易背锅,为了保证线段树不再翻车,这一次认认真真的写了一个线段树模板。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<stack>using namespace std;#de...

2019-05-03 20:48:11 166

原创 POJ3648 2-sat强连通缩点法

题意:有一对新人结婚,邀请n对夫妇去参加婚礼。有一张很长的桌子,人只能坐在桌子的两边,还要满足下面的要求:1.每对夫妇不能坐在同一侧 2.n对夫妇之中可能有通奸关系(包括男男,男女,女女),有通奸关系的不能同时坐在新娘的对面,可以分开坐,可以同时坐在新娘这一侧。如果存在一种可行的方案,输出与新娘同侧的人。解析:分析可知用2-sat选择与新郎同侧的人,那么与新娘同侧的人就对应知道了,这样求解答案...

2019-05-03 18:01:08 188

原创 HDU1814 求2-sat字典序最小的解

题意:有n对人,编号从1-2*n,有m对人互相不喜欢,每对人中必需选1个人加入和平委员会,求字典序最小的解解析:直接2-sat建图然后用染色法跑dfs即可。#include<bits/stdc++.h>using namespace std;const int maxn=8005*2;vector<int> g[maxn];bool v[maxn];in...

2019-05-03 17:36:51 328

原创 牛客寒假算法集训营1 小a与军团模拟器(启发式合并)

这道题通过dfs暴力统计初始军团数是常规操作,此题难点在于之后的修改操作,我们可以用vector记录下每种颜色存在的位置,然后枚举要更改的颜色位置,每个位置原来对于答案的贡献是和他相邻不同色的节点个数,我们减去原来的答案加上更改后的答案就得到了当前的答案。然后再暴力合并vector就可以解决问题,然而这种解法会T掉,我们考虑优化合并操作,我们能发现把x变成y和把y变成x得到的答案是相同的,...

2019-05-03 14:03:26 140

原创 拓展欧几里得经典题(+卢卡斯定理)

题意:现在你在1层楼,每次移动能向上移动a层或者向下移动b层,问最少移动多少次能到达第m层,设楼层有足够高并且地下层数也足够多,因此不必考虑到达楼层上限或下限。数据范围:1<=m,a,b<=1e9,答案对p取模,1<=p<=1e6。题解:构造不定方程ax + by = m – 1,求解一个正数x和负数y,用扩展欧几里得算法求解得到x-y的最小正整数解,然后输出C(x-y...

2019-04-29 17:32:30 252

原创 第十五届华中科技大学程序设计邀请赛现场赛 H题 反向建图+排序+搜索

题意:给出一个由若干单词组成的文章,给出一些单词间的转换规则,修改文章使得1.字母aeiou出现的次数尽量小 2. 在1的基础上文章长度尽量短。 求出现次数和文章长度。解析:按单词转换规则反向建图,将单词按照元音字母出现次数第一关键字,长度第二关键字排序,从小到大进行dfs/bfs,逐一处理出每个单词可以转换的最优单词。此题巧妙的地方在于不需要进行tarjan缩点,直接对所有点排序,逐一dfs...

2019-04-25 22:13:45 122

原创 第十五届华中科技大学程序设计邀请赛现场赛 C题 巧用树状数组

题意:求区间长度在[L,R]内,区间和大于等于s的区间个数。解析:先将所有的前缀和离散化,然后将长度为L到R的前缀逐一插入树状数组,再枚举区间左端点,扫一遍离散化后的前缀和数组,扫的过程中先更新答案,再更新树状数组。代码如下:#include<bits/stdc++.h>using namespace std;const int maxn=1e6+5;long lon...

2019-04-25 21:35:35 197

原创 十五届华中科技大学程序设计邀请赛现场赛 I题 单调队列

题意:给你一个n*m的矩阵,让你找到一个最大的L值,满足边长为L的正方形子矩阵中最大最小值差值小于等于G解析:一个显然的做法是使用二维数据结构,然而二维线段树和二维树状数组容易写炸,二维RMQ被卡了空间,于是只能选择滚动数组dp或者单调队列进行求解。由于笔者很少利用单调队列解题,正好通过这道题补一补单调队列的知识。对于单调队列,我们这样子来定义:1、维护区间最值 2、去除冗杂状...

2019-04-25 19:54:10 266

原创 主席树经典区间第k大模板(不带修改&&带修改)

此模板作用为经典的查询区间第k大不带修改:复杂度O(nlogn)带修改:复杂度O(n∗(logn)^2)不带修改的主席树就是在前一棵树的基础上重建其中一条链,其余的链都和原来的公用,相当于logn的复杂度新建一颗线段树代码如下:#include<bits/stdc++.h>using namespace std;const int maxn=2e4+5;con...

2019-04-12 22:36:15 510

原创 二维树状数组总结及模板

由于最近经常被二维问题卡住,而且二维线段树日常写炸,于是来学习总结一下二维树状数组来缓解一下一遇到二维问题就拉闸的情况。首先是最基本的单点修改+区间查询这个好说,就是普通一维的一个小拓展,就直接上代码了:int lowbit(int x){ return x&-x;}void add(int x,int y,int v){ while(x<=n)...

2019-04-12 18:02:08 8591 8

原创 HDU2825 AC自动机+状压DP

题意:给你m个字符串,求长度为n的包含至少k个给定串的字符串个数,答案对20090717取模思路:因为m的值很小,所以可以进行状压DPdp[i][j][k] i为字符串当前长度,j为当前走到的自动机的节点编号,k为状压后的当前状态于是只需在自动机上面跑满长度n,跑的过程中统计个数即可。代码如下:#include<bits/stdc++.h>using nam...

2019-04-09 20:34:26 171

原创 从poj2778到hdu2243 AC自动机+矩阵快速幂+等比矩阵求和

poj2778:给你m个病毒串,问不包含病毒串的长度n的DNA片段有几个。显然是一道AC自动机的题目,但难点在于如何求出答案。从根出发,在AC自动机上跑,经过k次转移到达某个结点,这个结点所代表的病毒串可以看作长度为k的字符串的后缀,顺着字典树往下跑可以转移到新的长k+1字符串。在建自动机过程中,把每个病毒串的结尾打上标记,由于AC自动机后缀节点的特性,如果某个节点的后缀节点被打上标记...

2019-04-08 19:52:14 130

原创 POJ1389 扫描线+线段树

一道经典的扫描线+线段树求矩形面积并的题目用线段树维护y,记录所有线段被覆盖的次数和长度,扫描线维护x,把一个长方形拆成两个事件,左边界作为+1,右边界作为-1,即可利用线段树进行维护。非离散化版本:#include<iostream>#include<algorithm>using namespace std;#define lson k<...

2019-04-04 16:56:43 193

原创 计算中缀表达式模板(支持变量)

#include<bits/stdc++.h>using namespace std;const double eps=1e-8;int priv[130];double val[130];string a;void init(){ priv['+']=priv['-']=3; priv['*']=priv['/']=2; priv['^']=1...

2019-04-03 21:32:05 269 1

原创 计算几何模板综合第三弹 经典问题

#include <bits/stdc++.h>using namespace std;const double eps=-1e8;const double pi=acos(-1);const int maxn=1005;int cmp(double x){ if(abs(x)<eps) return 0; if(x>0) ...

2019-04-03 16:50:25 216

原创 计算几何模板综合第二弹 圆

#include <bits/stdc++.h>using namespace std;const double eps=-1e8;const double pi=acos(-1);const int maxn=1005;int cmp(double x){ if(abs(x)<eps) return 0; if(x>0) ...

2019-04-02 21:42:49 154

原创 计算几何模板综合第一弹 点,线,多边形,凸包,半平面

#include<bits/stdc++.h>using namespace std;const double eps=-1e8;const double pi=acos(-1);const int maxn=1005;int cmp(double x){ if(abs(x)<eps) return 0; if(x>0) ...

2019-04-02 17:55:39 207

原创 第十七届上海大学程序设计春季联赛 CSL的魔法

此题很容易想到一个序列递增,另一个序列递减即可满足,然而这样写会一wa到底。考虑这样一个例子:31 3 23 1 2答案是:0发现这样一组例子后考虑用pair数组,先让一个序列升序,求最少交换几次能让另一个序列降序即为答案。为了方便起见,笔者的代码是先让一个序列逆序,求最少交换几次能让另一个序列升序。代码如下:#include<bits/stdc...

2019-04-01 19:53:15 157

原创 HDU2121&&BZOJ4349 最小树形图(无根&&有根)

HDU2121题意:给你一张n个节点m条边的有向图,求此图的最小树形图,输出最小树形图的权值和根节点编号。思路:最小树形图模板题,特殊点在于未指定根,需要自己定义一个虚拟根,把这个根连向其余的每一个点,边权为其余所有边权值和加1,这样求出答案以后只用判断ans-sum是否小于sum即可,小于说明虚拟根出度为1,原图是连通图,答案成立。代码如下:#inclu...

2019-03-28 16:39:25 209

原创 codeforces 125E 单度限制最小生成树

题意:满足1号节点度为k的前提下,求最小生成树,输出此最小生成树的边数和所有边的编号。数据保证无自环无重边。思路:对除1号节点以外的点集,求一次最小生成森林,对于每一个最小生成森林的联通分量,选择一条最短的边与1号节点相连,设有x个最小生成森林,那么此时1号节点的度数就为x。如果x>k,那么此问题无解,否则考虑换边。即每次尝试加入一条与1号节点相连的边,然后删去所成环上的最长边,此...

2019-03-27 19:03:22 264

原创 POJ3041 二分图 最小点覆盖=最大匹配数

题意:有一个N*N的网格,该网格有K个障碍物.你有一把武器,每次你使用武器可以清楚该网格特定行或列的所有障碍.问你最少需要使用多少次武器能清除网格的所有障碍物?分析:把网格的行看作左边点集的点,网格的列看成右边点集的点. 如果(i,j)格有障碍,那么就从左边i点到右边j点之间连接一条边,这样问题就转化为了求新图的最小点覆盖即最少选多少个点能够覆盖所有的边利用二分图的特性最小点覆盖=最大匹配...

2019-03-18 20:16:45 117

原创 POJ2337 欧拉回路

题意:给你n个由小写字母组成的单词,要求将这n个单词连接起来,使得前一个单词的最后一个字母和后一个单词的第一个字母相容,输出字典序最小的解思路:不难发现此题可以转化为欧拉路径问题,把每个字符串的第一个字母当作起点,最后一个字母当作终点,连一条有向边,求此图字典序最小的欧拉路径。对于有向图来说,存在一条欧拉路径的充要条件为此图联通并且要么对于每个顶点都有出度等于入度,要么有且仅有一个顶点...

2019-03-16 15:54:17 179

原创 牛客寒假算法集训营5 炫酷路途(建图 最短路)

可以将所有额外连边的点再加上起点终点构成一张单独的图。根据题目数据范围,上述最多一共只有32个点。随后计算这些点两两间的距离并求起点到终点最短路即可。这里用到了__builtin_popcount(),它可以O(1)计算二进制中该数字的1的个数代码如下#include&lt;bits/stdc++.h&gt;using namespace std;const ...

2019-03-05 19:08:36 245

原创 牛客寒假算法基础集训营4 Applese的毒气炸弹(最小生成树)

这道题的解法居然是最小生成树,根本看不出来啊,果然图论难就难在你根本看不出来它是图论。把同类元素的试剂当作一个点之后,把花费的脑力作为边权,求这个图的最小生成树即可。人尽皆知求MST通常选用克鲁斯卡尔,然而笔者的克鲁斯卡尔是没有灵魂的,就是生硬的模板,看到标程的代码以后惊为天人,所以在学会以后决定用博客记录下来。代码如下#include&lt;bits/stdc++....

2019-03-05 18:35:38 117

原创 牛客寒假算法集训营4 Applese走迷宫(经典bfs)

这题非常经典,但经典不是我记录它的理由。这道题值得记录的地方在于花费一个单位时间进行属性转换这个操作。这一点实现方法很多,但要么写起来有些麻烦,要么写出来不那么明了,看过标程以后才恍然大悟,原来可以很简单的处理它:只需要在搜到它的时候把它当作一个正常点,在操作结束,准备取出下一个点之前,把停留在原地一个单位时间进行属性转换作为一个特殊情况判断,符合条件就入队,这样一来代码就变得简洁明了...

2019-03-05 18:23:45 182 3

原创 欧拉筛扩展

欧拉筛可以认为是埃筛的升级版。埃筛的缺陷在于对于一个合数,有可能被筛多次,例如30=2*15=3*10=5*6。不难发现,如果我们用它的最小质因子来筛选,就可以保证每个合数只被筛选一次,这便是欧拉筛法。而欧拉筛的扩展就在于它可以在筛素数的同时求积性函数。积性函数定义:对于一个函数f(x)满足:若gcd(a,b)=1,则f(a*b)=f(a)*f(b)。求欧拉函数int pri...

2019-03-05 18:07:33 110

原创 牛客寒假算法集训营1 小a的学期(欧拉筛 组合数)

容易推得答案就是C(2n,n)-C(2n,n+k),然而数据不保证p为质数,这样一来就不能直接逆元求组合数了。我们可以用线性筛预处理出每个数的最小质因子,对于每个数将其分解成质数乘积的形式,最后统计每个质数的贡献。此题并不难,值得记录一下的原因是这题质因数分解相消的方法比较巧妙,仅需记录最小质因数即可。代码如下#include&lt;bits/stdc++.h&gt;...

2019-03-05 17:12:37 189

原创 牛客寒假算法集训营1 小a的集合(set+线段树)

此题巧妙的地方有两点,一点是利用线段树维护区间异或和的时候,直接判断区间长度的奇偶性,为奇数就异或给定值。另一点就是在删除的时候,巧妙的利用插入函数先插入再删除,这样一来删除就变得简单得多。这道题对代码能力要求较高,笔者来来回回折腾了近四个小时才调出来,果然对代码能力的训练是一个永恒的话题。代码如下#include&lt;bits/stdc++.h&gt;using nam...

2019-03-04 23:27:26 167

原创 2018acm-icpc青岛 E题 思维+二分

难点就在于check的实现,wa了很多发以后,选择了分情况讨论,核心就是一个递推的思想,理清楚情况就行。代码如下#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=1e5+5;long long a[maxn];int n;long long m;long long c[maxn];bool che...

2018-11-22 17:31:15 207

原创 LOJ 持久化序列 可持久化treap

一道模板题 在写完这道题以后就去找其他带翻转的可持久化treap题去写了发现自己根本不会可持久化treap 什么标记翻转可持久化 自闭了一整天网上也没有找到很好的模板 于是选择搁置一段时间 等以后时间充裕了再来磕#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=5e5+5;struct node{...

2018-10-30 23:52:36 297

原创 BZOJ3224无旋treap

先diss一波洛谷P3835 这道题数据巨弱 写了一个假的可持久化treap 居然过了 导致之后真正的可持久化treap疯狂wa最后选择放弃这道题 换了LOJ的一道模板题普通的无旋treap还是比较简单的BZOJ3224#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=1e5+5;struct n...

2018-10-30 17:56:38 128

原创 BZOJ1500 无旋treap终极模板题

找了很多treap的模板 大多都是指针版本然而指针版本用的很不习惯啊好不容易找到了数组版本 结果发现是个带旋的treap带旋的treap分分钟被splay吊打啊无奈之下只能结合网上一些模板通过自己的总结弄出来了这个无旋treap终极模板其实自己还不太懂这个区间操作的本质 先码上慢慢理解#include<bits/stdc++.h>using namesp...

2018-10-30 15:01:13 210

原创 BZOJ2565 回文自动机

这题用马拉车也可做 只是很久没用马拉车 已经不会用了QAQ还是直接上回文自动机吧只需要正反各建一次自动机记录以某个点为断点的最长回文串 拼起来就是一个双回文串了 最后扫一遍更新最大值就行#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=1e5+5;const long long mod=1e9+7...

2018-10-28 15:52:07 131

原创 回文自动机模板

标准版#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=1e5+5;const int N=26;struct Palindromic_Tree{ int next[maxn][N]; int fail[maxn]; int cnt[maxn];//第i个节点表示的回文串出现的次数...

2018-10-27 16:08:03 449 1

原创 BZOJ3238 后缀自动机+推公式

拿到题目第一步就把前面的len(Ti)+len(Tj)手算出来了可以知道这个答案只和n有关系 为n*(n+1)*(n-1)/2 (如果不会手算On跑出来也行 问题不大)后面求LCP就是重点了 通常来讲 一看到LCP我就准备放弃了只因为我在题目之中多看了它一眼 于是我就发现这题可做首先我们需要一颗后缀树 因为两个后缀的LCP就是它们LCA的len后缀树怎么得到呢 直接把字符串反向...

2018-10-26 23:41:57 153

原创 HDU5343 后缀自动机+dp

拿到这道题的时候我没有任何思路正解的思路是建两个自动机,然后全部拼起来再去重,然而这种思路一开始就被我否定了去重?怎么去重?我觉得完全不可做啊(为自己的智商担忧)于是不得不去百度一发,感觉看到了新世界 一个全新的思考方式对于一个合法解,有可能中间存在一段即是A的子串,又是B的子串,那么此合法解就有多个合法的划分方案但是一个合法串对答案只有一次贡献 于是我们稍加思考(反正我没想到...

2018-10-26 22:54:24 177

原创 HDU4436 后缀自动机+dp

拿到题的第一眼 咦 好熟悉行云流水建个后缀自动机 在自动机上dfs一发 秒过样例 直接交题 然后T到心态爆炸后来了解到这道题现场赛只有13个队出 金牌题???不过毕竟是12年的区域赛 那个时候后缀自动机可能还没有现在这样普及于是被迫思考dp写法 记得有一道题和这题dp思路很像 然后试了一发 果然如此 可以认为是蒙出来的QAQ耗时150ms 但是题目给了3s是什么鬼? 可能出这题...

2018-10-26 20:44:14 217

空空如也

空空如也

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

TA关注的人

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