![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
精华
文章平均质量分 66
wind__whisper
qwq
展开
-
git 命令总结
一些git命令原创 2022-09-29 10:08:30 · 303 阅读 · 0 评论 -
NOI2022 游记
恍惚如梦原创 2022-08-26 19:28:24 · 2446 阅读 · 0 评论 -
LNOI2022:游记
LNOI 2022原创 2022-05-25 23:40:58 · 692 阅读 · 1 评论 -
PKUSC2022 游记
PKUSC 2022原创 2022-05-22 22:20:37 · 953 阅读 · 0 评论 -
P1791 [国家集训队]人员雇佣(网络流)
网络流原创 2022-04-12 23:40:29 · 204 阅读 · 0 评论 -
模板:广义二项式反演/广义容斥(组合数学)
容斥是计数的一个常用技巧原创 2022-02-07 22:08:30 · 617 阅读 · 0 评论 -
模板:Miller-Rabin&Pollard-Rho(数论)
优美高效的素性相关算法原创 2022-01-14 19:25:08 · 573 阅读 · 0 评论 -
洛谷P4219 大融合(LCT、虚子树)
关于LCT维护子树问题的方法原创 2021-12-08 23:59:41 · 168 阅读 · 0 评论 -
NOIP2021:游记
前言似乎前一秒还在为接下来的考试紧张,下一秒就已经走出了考场恍惚之间也突然意识到,有些日子,可能真的变成了过往停止emo感谢FFC,感谢大连,使这次考试顺利进行主要的问题是T4的暴力写的时候只有不到一个点,最后也没调出来其实有44分有点心疼“一道题正解的难度和暴力的难度完全是两回事”越来越感觉yjx的这句话很有道理可以说和考前重心一直在正解忽视了暴力有关系吧但这个策略也给了我回报很难说究竟是对是错谁考场又能真正的百分百发挥呢还是可以说不遗憾了吧day -2打了最后一次模原创 2021-11-21 14:03:44 · 847 阅读 · 0 评论 -
P4342:[IOI1998]Polygon(区间dp)
一道警钟一样的好题解析乍一看:“这不就能量项链嘛,这也蓝?”然后就愉快的WA掉了…qwq让我们回归本源,在什么时候可以动态规划?“局部最优解可以带动全局最优解的时候,我们可以使用动态规划算法”然而在本题中,却不满足这个条件!局部的最大值不一定会导致全局的最优!当另一边为负时,局部取最大反而是最差的结果所以应该维护一个最小值,考虑从两方面进行转移以后写类似的题一定要多想一想,不能想当然代码#include<bits/stdc++.h>using namespace.原创 2021-11-12 15:21:23 · 222 阅读 · 0 评论 -
洛谷P2497:基站建设(splay、斜率优化)
所谓splay斜率优化dp,就是利用splay和斜率对dp进行优化(逃)解析在斜优的时候,有时我们会发现我们插入的点的横坐标并不单调这个时候我们就无法利用单调队列维护凸包了这时,我们就要请出今天的主角:splay插点splay斜优最容易错的一个地方我们维护一个以结点横坐标作为关键值的splay结点记录第信息有:左右儿子、父亲、xy坐标、分别与左右两边第一个结点的斜率注意这个第一个结点不一定是左右儿子!特别的,没有儿子时赋值成正(右)负(左)无穷step1首先,让我们把结点按照s.原创 2021-10-29 01:26:19 · 279 阅读 · 0 评论 -
2021CSP:游记
前言没做出别人做不出的题却犯了别人不会犯的错考场先遍历T1感觉似乎很水的样子T2这甚么东西…T3似乎有的一搞T4网络流模板可以拿40(然而由于某次模拟悲伤的前车之鉴并不想为这点分写又臭又长的dinic…)先开T1一开始直觉想三分水过去但分析了一下下后很快发现这个玩意显然不是上凸的是一个乱七八糟的函数然后搞了一个乱七八糟的做法假到被样例1hack掉了…但冷静想想后发现了正解利用单调性二分再套个树状数组判断即可复杂度nlogn2nlogn^2nlogn2由于感觉后面题似原创 2021-10-24 13:43:09 · 237 阅读 · 1 评论 -
linux一些好用的命令和快捷键
以后知道了再加吧ctrl-alt-T:yjx之殇快捷键ctrl-x h:全选ctrl-x 3:左右分栏ctrl-x 1:还原1栏ctrl-x r:查找alt-%:替换diff-b :忽略空格-B:忽略换行-y :左右分栏-W 50 :调整分栏间距原创 2021-10-21 12:49:26 · 121 阅读 · 1 评论 -
模板:树上启发式合并(dsu on tree)
文章目录解析step1:树剖step2:求出轻儿子的答案(不继承)step3:求出重儿子的答案(继承)step4:加入自己的答案、合并轻儿子的答案并记录答案step5:清空复杂度分析代码所谓树上启发式合并,就是在树上进行启发式合并(逃)解析通过很妙的操作将暴力的复杂度优化到log级别可以解决对子树的一些离线静态问题大概讲一下流程:step1:树剖先剖一下确定重儿子为后来的dsu做准备顺便求出size和dfs序等信息注意这个dfs序不一定要先搜重儿子所以直接在一个dfs函数里解决就可原创 2021-10-20 21:14:00 · 202 阅读 · 0 评论 -
LOJ&洛谷P1248加工生产调度(贪心、Johnson 法则)
解析和国王游戏一样的做法容易写出cmp函数的依据:min(u.a,v.b)<min(u.b,v.a)但是这个题的比较函数有一个取min的操作这个东西会有一个问题:不满足不可比性的传递性通俗的说,x=y,y=z,但是x不一定=z比如说如果y的a和b都很小,就会出现这个无论a和c之间关系如何,等式总是成立的尴尬情况为了避免这个东西,引入了Johnson 法则设置dd=1(a>b)d=0(a=b)d=-1(a<b)在d不同时,优先按照d排序(显然d不同时是正确的)原创 2021-10-08 22:48:30 · 610 阅读 · 0 评论 -
模版:替罪羊树
文章目录前言注意事项代码所谓替罪羊树,就是有一头替罪羊的树(逃)前言在看完了一大堆各种平衡树的教程之后,决定学一个这个因为它有一个很关键的好处:无须旋转可以在pushup复杂度太恶心的题中做到splay做不到的事情比如平衡树套线段树但是在区间问题中还是splay最强啦!注意事项拍扁操作必须是未被删除的点拍扁时要记录点的副本数量!代码#include<bits/stdc++.h>using namespace std;#define ll long long原创 2021-10-04 08:00:50 · 96 阅读 · 0 评论 -
模板:K-D tree
文章目录前言思想操作建树询问修改完整代码所谓KDtree,就是有K个D的树(逃)前言KDtree是一种解决多维问题的暴力数据结构K维状态下的最差复杂度是nk−1/kn^{k-1/k}nk−1/k在最常见的2Dtree中就是根号n但是玄学的它常常能到logn的复杂度是骗分利器 (据说)思想按照每一维交错排序不断用超平面尽量的平分所有点操作建树就是按照思想所说的模拟即可使用O(n)的nth_element十分方便int build(int l,int r,int f){ i原创 2021-09-29 00:30:48 · 194 阅读 · 0 评论 -
9.27模拟:至暗时刻
黑暗使人清醒前言15pts0+0+15+0总的来说,就是能切的没切掉,不该挂的分全挂了呜呜呜考场先看题有构造专题那味了感觉题目都好奇怪啊…似乎T1看起来相对比较水的样子T2感觉可能是奇怪的模型,也许可做?T3这是甚么玩意。。。已经决定扔了T4感觉需要推一些性质,想写一个60左右的分,再看看能不能优化到切掉 根本没推就先把分定好了开局啥都没推就给自己定了200多分??仔细想想,最近考试似乎都是这么做的…常在河边走,怎能不湿鞋…先T1先试了试自己直观莽的几个假做法证都没.原创 2021-09-28 00:23:36 · 107 阅读 · 0 评论 -
模板:2-SAT问题
文章目录所谓2-SAT,就是解决两个SAT的问题(逃)原创 2021-09-25 23:47:35 · 99 阅读 · 0 评论 -
YBTOJ:向量问题(线段树分治、凸包)
文章目录题目描述数据范围解析代码题目描述你要维护一个向量集合,支持以下操作:插入一个向量 。删除插入的第 x 个向量。查询当前集合与(x,y)(x,y)(x,y) 点积的最大值是多少。如果当前是空集输出0。数据范围n<=2e5,x、y∈[1,2e6]n<=2e5,x、y∈[1,2e6]n<=2e5,x、y∈[1,2e6]解析考虑作当前向量的垂线,该线自上而下平移截得的第一个向量对应的点就是答案如果本题没有删除操作,可以利用一个凸包来维护但是如何支持删除呢?考虑原创 2021-09-23 09:41:02 · 139 阅读 · 0 评论 -
YBTOJ:采矿战略(线段树维护dp、树链剖分)
文章目录题目描述解析代码题目描述所谓线段树维护dp,就是在线段树上维护dp(逃)解析把树剖一下后就变成了区间问题考虑建一棵线段树,每一个结点都是一个背包这样就能区间查询,也能带修了这种做法复杂度其实并不理想,是logn*dp合并复杂度本题背包就是m2lognm^2lognm2logn但是如果出题人想考这个肯定会在数据范围上放你一条生路啦(调了半天结果树剖挂了就离谱)代码#include<bits/stdc++.h>using namespace std;#de原创 2021-09-24 23:24:04 · 170 阅读 · 0 评论 -
STL:bitset用法详解
文章目录前言声明输入输出访问与修改所谓bitset,就是bit组成的set(逃)前言bitset的诸多好处:1.节约空间2.运算简便3.有了1和2还不够吗!?当然,还有一个决定性的好处:官方比赛可以使用!声明开就完了尖括号里是大小还可以初始化注意这里的赋值时从低位到高位bitset<10>a1;bitset<10>a2((string)"010110");输入输出只能用cout对整体进行输出蒟蒻并不会输入(不过这种用来顶包vis的数组原创 2021-09-22 23:14:43 · 752 阅读 · 0 评论 -
YBTOJ:消除格子(二分图匹配)
文章目录题目描述解析代码题目描述在一个n*n的矩阵中,有 k个格子中有杂物,现在你有一种能力,一次可以消除一行或一列格子中的杂物,问你至少需要几次可以将这些杂物全部消完。解析看起来像是网络流,结果竟然是二分图。。。本题关键是模型的转化,思路有了后就变成板子了考虑做法:对于每一个点(x,y)(x,y)(x,y),都连一条从x到y的边,最后求最大匹配就是答案为什么是这样?首先,这样连边之后,每个点对应一条边,因此每条边至少要有一个点被选到,因此相当与求这个图的最小点覆盖然后就是两个很妙的原创 2021-09-17 16:11:53 · 275 阅读 · 0 评论 -
模板:高斯消元
文章目录前言解析step1 选择主元代码step2 消元step3代码完整代码高斯消元,就是按照高斯的方法消元前言考虑我们手算是如何解多元线性方程组的要么加减消元,要么代入消元但显然对于编程来说,加减消元更具有普适性如何进行呢?解析step1 选择主元选择本次消去的主元x,并找到x系数最大的方程k实现起来不难为了以后方便,我们把方程k swap到最上面代码int r=i; for(int j=i+1;j<=n;j++){ if(fabs(mp[r][i])<原创 2021-09-13 09:53:25 · 114 阅读 · 0 评论 -
模板:环套树
文章目录前言解析找环代码练习thanks for reading!前言环套树者,一个环套一棵树也解析定义:n个点,n条边的无向连通图其实就是树多了一条边,连出了一个环性质:如果对环套树进行dfs,多出的一条非树边一定是一条返祖边考虑dfs的过程如果它不是返祖边,dfs的时候就会直接从这条边过去,该边就会成为树边了找环如何在环套树上找到非树边?考虑dfs,如果出边指向已经被搜过的点,那么这条边(和它的反向边)就是非树边注意!:这里dfs的时候不能传来到当前节点的节点fa,而是要传原创 2021-09-09 10:15:20 · 270 阅读 · 0 评论 -
模版:线段树合并+线段树分裂
文章目录前言合并代码分裂代码前言话说天下之树,分久必合,合久必分合并所谓合并,就是把两个树合并以把B树合并到A树为例如果A没有该节点,改成B的该节点返回如果B没有该节点,直接返回否则递归合并子树,最后更新答案即可特殊的,如果到了叶子,就把A的答案加上B的答案代码void merge(int &a,int b,int l,int r){ if(!a){ a=b;return; } if(!b) return; if(l==r){ tr[a].siz+=tr[b原创 2021-09-06 19:31:56 · 160 阅读 · 0 评论 -
主席树 学习报告
文章目录前言可持久化线段树代码区间第k大代码练习粟粟的书架代码森林代码任务查询系统代码列队代码前言主席树,全称是可持久化权值线段树利用r和l-1两棵权值线段树作差得到[l,r]的信息从而解决各种问题在排名这方面功能极其强大可持久化线段树学主席树之前,我们当然要先掌握这个东西啦首先有一个动态开点其实也很简单,就是只增加每个版本信息相对于上一个版本不同的结点,其他结点保留这样每次修改只会增加log个结点保证空间复杂度的正确性代码#include<bits/stdc++.h>原创 2021-08-25 00:25:29 · 259 阅读 · 0 评论 -
模板:二叉搜索树&平衡树
二叉搜索树二叉搜索树是一种二叉树的树形数据结构,其定义如下:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。二叉搜索树的左右子树均为二叉搜索树。二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比。对于一个有 n个结点的二叉搜索树中,这些操作的最优时间复杂度为 Ologn,最坏为On。随机构造这样一棵二叉搜索树的期望高度为logn。代码#includ原创 2021-08-19 17:32:17 · 402 阅读 · 2 评论 -
取模除法(逆元)(费马小定理)(线性求逆元)
文章目录引言逆元费马小定理内容应用证明thanks for reading!引言我们做题时经常会由于答案过大,被要求使答案对一个质数取模我们都知道,加和乘对取模是没有影响的减法也只需要写一个:int mod_minus(int a,int b){return a-b>=0 ? a-b : a-b+mod}就可以啦但是除法就很头疼怎么办呢?这里介绍一种比较简单的利用费马小定理求逆元实现取模除法的途径结合快速幂,每次复杂度为log级别(据高二大佬说还有线性做法,不过我不会 )首先原创 2021-07-19 01:01:51 · 1186 阅读 · 0 评论 -
P2168 [NOI2015] 荷马史诗(哈夫曼编码树)
传送门文章目录题目描述解析细节代码题目描述解析其实就是构造一棵树另所有带权点都为叶子节点其代价为权值与深度的乘积求最小代价及最小代价下的最小深度可以看成一开始有n棵小树每次把k棵合并在一起最后合成一棵大树就行了每次合并的代价是k棵树的权值和看到这个我们不禁想到了合并果子自然想到用堆来维护最小值注意由于要保证深度最小所以要双关键字排序权值相同时按树的深度排序细节1.当(q.size()-1)%(k-1)!=1时,需要填一些空点使其能被恰好填满2.注意最后深度要减1代码原创 2021-07-17 09:11:05 · 285 阅读 · 0 评论 -
模板:网络流(Dinic算法)
文章目录1.网络最大流题目描述解析反悔边分层(避免环流)时间优化代码2.费用流描述解析代码1.网络最大流洛谷P3376题目描述给出一个网络图,以及其源点和汇点,求出其网络最大流。解析网络流的思想就是在原有的基础上不断进行增广基于一个贪心的思路,先bfs判断是否存在增广路,再通过dfs增广反悔边但显然贪心会出错(比如当前终点通过其他点来使用会更优时)所以就引入了反悔边就是与所给边方向相反,一开始容量为0增广使用边时除了把改变的边容量减去流量,再把反向边加上同样的流量即可这样以后在必原创 2021-06-05 23:54:22 · 291 阅读 · 0 评论 -
树的合并(ybtoj-树上dp)
文章目录题目描述前言解析代码thanks for reading!题目描述前言全网唯一AC!!!妙啊而且还是完全自己想出来的做法开心(APIO还是没白听)但是思路出来后代码实现十分坎坷建两个图分别dfs3次那个地方就算是写不明白了代码能力需要加强解析定义数组dis:dis[i]表示i在自己那棵树上所能连出的最长简单路径不难看出:对于将两棵树上的边x,y相连时新的直径要么是两棵树原来一棵的直径,要么就是经过了x和y也就是:max3(直径A,直径B,dis[x]+di原创 2021-05-23 01:10:16 · 446 阅读 · 0 评论 -
树链剖分-学习报告
(自学最棒了)概要(这是笔者刚学完趁热写的博客由于也是初学,所以可能会对初学读者比较友好吧毕竟你不明白的地方我可能也迷惑过)学完感觉树链剖分的设计真的很巧妙其主要用途是压缩树上路径又是一个n到log的优化原理先引定义:设定每个结点所有儿子中,子树的结点个数最多的儿子为重儿子重儿子连成的链叫做重链每条重链深度最小的点叫做重链的链头能得出一个很重要的结论:树上的任意一条路径经过的重链数不超过logm(m为边数)这是树链剖分提速的关键这个结论画个图就能很容易的看出来(路径产生断原创 2021-05-21 23:19:53 · 100 阅读 · 0 评论 -
多重背包的二进制优化(ybtoj-宝物筛选)
题目描述解析朴素算法首先考虑朴素算法把数量为num的物体拆成num个子物体其价值与重量是原物体的1,2,3…num倍然后当成独立的物体求就行了注意应该先枚举重量,再枚举子物体因为这些子物体是不能同时取的因为同时取时,总个数可能会超过num时间复杂度:nwm(这题这做法也能过就离谱)代码#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#inc原创 2021-05-18 20:30:39 · 118 阅读 · 6 评论 -
线性筛素数的实现与证明
情境大家应该都知道用nlogn的时间复杂度筛出[1,n]的所有素数,但是当n的范围较大时,这个方法就不奏效了今天我们谈谈素数的线性筛法,也就是用On的时间复杂度筛出[1,n]的所有素数解析nlog的算法之所以会慢,是因为它进行了很多重复的操作比如,24可能就被筛了很多遍那么我们优化复杂度的思路就是尝试避免这些重复操作也就是让每个合数只被筛一次怎么做呢?我们让每个合数只会被自己的最小质因数筛到先看一下代码:代码void solve(){ for(int i=2;i<=n;i++原创 2021-05-18 20:56:03 · 160 阅读 · 0 评论 -
矩阵快速幂一篇通
文章目录概述快速幂解析代码矩阵运算定义加法乘法单位矩阵一、斐波拉契(基础模板)题目描述解析代码二、行为方案(实际应用)题目描述解析代码三、矩阵求和(子矩阵作为矩阵元素)题目描述解析代码四、最短路径(对矩阵乘法灵活的定义方式)题目描述解析代码:thanks for reading!概述矩阵快速幂,顾名思义,就是矩阵乘法与快速幂的结合,可以将时间复杂度优化到log级别。当数据范围中图的尺寸较小,而时间、变换次数、步数等的范围较大(通常在1^9左右)时,可以考虑矩阵快速幂问题矩阵快速幂的关键在于构造转移矩原创 2021-05-17 00:33:12 · 334 阅读 · 0 评论 -
不止代码:洛谷P1064 金明的预算方案+P2014选课(依赖背包)
文章目录题目描述总结解析代码洛谷传送门题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 n元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的。如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0个、1 个或 2 个附件。每个附件对应一个主件,附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈原创 2021-05-02 00:48:25 · 209 阅读 · 0 评论 -
理解至上:数位dp(ybtoj-B数计数)
文章目录简要题目描述解析dp定义:试填法代码thanks for reading!简要数位dp,天下第一最重要的应该有两个:1.状态转移式的确定2.试填法不断往后模拟(至今是唯一一道数位dp,究竟重要的是啥我其实也没有太多经验 )至少这道题提供了很好的方法与套路题目描述解析dp定义:pos:表示位数res:表示膜13的余数op:表示关于出现13的状态,其中:op=0: 啥也没有op=1:没有出现13但最高位是3(再来个1就ok啦!)op=2:已经存在13了dp[p原创 2021-04-22 00:54:49 · 366 阅读 · 0 评论 -
理解至上:二叉堆与优先队列详细用法
二叉树为什么不用pq呢算比较简单的数据结构了主要性质:1.是二叉树2.爸爸比#include<bits/stdc++.h>using namespace std;#define ll long long#define mem(a,b) memset(a,b,sizeof(a))const int N=1e5+100;int a[N];int n,m;void put(int k){ tree[++len]=son; int son=len; while(son&g原创 2021-04-13 22:10:05 · 132 阅读 · 0 评论 -
大赛:2021省选 总结
概要想清楚再敲代码!!!仔细审题!!!第一次大赛没有CE就算完成历史任务了见到了赛场长什么样子这次可贵之处应该是心态调整的很好(因为肯定选不上 );基本发挥出了自己的水平吧(就是五个暴力+一个RE )以后考试也应该一样注意力应该在题上,不要想太多awa最好情况下得分(t1-t6):60 30 0 25 25 30 tot=170(理想总是丰满的)各种原因损失得分:t1:0t2:20(暴搜出了问题)t3:15(老是RE)t4:0t5:35(没审题加先入为主)t6:70(一行代原创 2021-04-11 21:33:14 · 610 阅读 · 0 评论