从普通平衡树到可持久化平衡树 从普通平衡树到可持久化平衡树普通平衡树操作分别为插入 x数删除 x 数(若有多个相同的数,因只删除一个)查询 x 数的排名(排名定义为比当前数小的数的个数 +1 )查询排名为 x 的数求 x 的前驱(前驱定义为小于 x,且最大的数)求 x的后继(后继定义为大于 x,且最小的数)Splay版本(为了防止特殊数据,添加了随机换根操作)#include<iostream>#include<stdio.h>#include<string.h&
从拓扑排序到2-sat 从拓扑排序到2-sat拓扑排序#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#define maxn 100005using namespace std;int n,m,tot;int deg[maxn];int q[maxn];int head[maxn],nex[maxn],to[maxn];void add(int x,int
dsu on tree dsu on treedsu on tree解决的是什么问题呢?不带修改暴力做法是通过枚举一个点,然后枚举这个点的子树来统计信息来解决例如求每个点的子树里出现了多少种颜色,出现次数最多的颜色等。怎么做呢?先找出轻儿子和重儿子dfs的时候先走轻儿子,再走重儿子如果当前轻儿子,回溯回来的时候就把这一次所产生的信息清除。如果当前是重儿子就不清了。复杂度证明?由树链剖分的性质,任意一个节点到根节点的路径上轻边的数量不超过 logn\log nlogn条 ,每个节点
从最短路到差分约束系统 从最短路到差分约束系统Bellman-Ford(SPFA)void spfa(int s){ memset(dis,-1,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[s]=0; q.push(s); vis[s]=1; while(!q.empty()) { int now=q.front(); vis[now]=0; for(int i=head[now];i;i=nex[i]) { if(dis[to[i]]==-
从二分图最大匹配到二分图最优匹配 从二分图最大匹配到二分图最优匹配二分图最大匹配没啥说得,直接上代码。int vispipei[maxn],match[maxn];int dfspipei(int now){ for(int i=1;i<=nn;i++) if(dis[now][i]) { int nex=i; if(!vispipei[nex]) { vispipei[nex]=1; if(m
虚树 虚树适用范围虚树常常用来处理询问的点数远小于处理询问要经过的树上的点数的一类问题。简单做法把所有点和他们任意两个的LCA求出来,将它们按照父子关系构建一棵树,还要想好两两之间的边权如何处理构建方法首先把所有询问的点按照在原树的dfsdfsdfs序排序,我们还需要一个栈来维护从根到当前节点的链。把111号点加进去,为了保证3不会把栈弹空每枚举到一个点,如果栈为空,直接入栈,否则求它和栈顶的lcalcalca。 对于这个lcalcalca和栈顶元素的dfsdfsdfs序有
从pbds、rope到stl数据结构的奇技淫巧 从pbds、rope到stl数据结构的奇技淫巧1. pbdspbds常用的有哈希表,平衡树,以及各种堆等数据结构。首先使用pbds都要加上**using namespace __gnu_pbds;**哈希表#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/hash_policy.hpp>使用方法定义:cc_hash_table<int, bool> hash1;
从拓展卢卡斯定理到卢卡斯定理 从拓展卢卡斯定理到卢卡斯定理1. 拓展卢卡斯定理拓展卢卡斯定理是在modmodmod不是质数但是将modmodmod质因数分解后得到 p1k1p2k2⋯pnknp_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}p1k1p2k2⋯pnkn 之后,pikip_i^{k_i}piki都很小的情况下解决Cnm%modC_n^m\%modCnm%mod的一种方法...
从整体二分到CDQ分治 从整体二分到CDQ分治1.整体二分整体二分就是将一个量(一般为答案),进行二分,对于已经满足的,就分到mid以左的部分递归进行二分,直到左边界等于右边界,如果没有满足就直接剪掉已经得到的部分,分到mid以右的部分进行递归实现。与cdqcdqcdq分治最大的一个区别就是,一般来说整体二分是先处理影响再向下递归,而cdqcdqcdq分治为先递归再处理影响。模板 bzojbzojbz...
从高斯消元到矩阵树定理 从高斯消元到矩阵树定理1. 高斯消元前置技能,枚举主元法的高斯消元,即消第n个元的时候,每次选出绝对值最大一个方程对其他的进行消元。但是常见的高斯消元模板并不能很好的解决,哪些元是变元以及哪些是确定解的问题。假设方程有nnn个未知数,mmm个方程,那么我们在高斯消元的同时记录一个变量nownownow,表示使用了nownownow个方程,注意考虑到第nownownow个方程发现...
高精度模板整理 高精度模板整理超级复杂各种高精度操作大合集(希望整个生涯都不会完整的敲一遍)#include<iostream>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<math.h>#include<string>#include<i...
从Prufer编码到各种树的计数 从PruferPruferPrufer编码到各种树的计数1. PruferPruferPrufer编码将无根树进行编码的一种方式,无根树就是边没有方向的树,即以树上的每一个点做根,只算一种方案。无根树转序列做法 每次找到编号最小的叶子,输出它父亲的编号,然后删除,直到只剩2个节点。序列转无根树做法 设集合S={1,2,⋯ ,n}S=\left \{ 1,2,\cdot...
从莫队到树上莫队 莫队,带修莫队,树上莫队莫队离线处理查询问题的解决方法。询问离线,第一关键字lll所在块,第二关键字rrr的绝对位置。设块大小为nx,左端点移动n1+x次,右端点移动n1−x+1次,x=0.5设块大小为n^x,左端点移动n^{1+x}次,右端点移动n^{1-x+1}次,x=0.5设块大小为nx,左端点移动n1+x次,右端点移动n1−x+1次,x=0.5核心代码//创...
从哈密顿路到竞赛图(tournament)相关 从哈密顿路到竞赛图(tournament)相关 去百度ACM竞赛图,确实能出现很多ACM竞赛图... 设一无向图有 n 个顶点,u、v 为图中任意不相邻的两点,deg(x) 代表 x 的度数 , 若成立,则存在哈密顿通路 设一无向图有 n 个顶点,u、v 为图中任意不相邻的两点,deg(x) 代表 x 的度数 , 若成立,则存在哈密顿回路 Dirac...
从线性筛到莫比乌斯反演 可积函数若∀gcd(m,n)=0 满足f(a∗b)=f(a)×f(b)且 ∃f(n)≠0则称f(x)为积性函数若\forall gcd(m,n)=0 \ \ \ 满足f(a*b)=f(a) \times f(b) 且\ \exists f(n) e 0 则称f(x)为积性函数若∀gcd(m,n)=0 满足f(...
arc 081 F Flip and Rectangles 题意: 给你一个n*m的有着黑色和白色的棋盘,你可以任意翻转一行或者一列,使得它颜色反色,求最大黑色子矩形。 我们首先观察翻转颜色,发现如果令黑色为1,白色为0,那么无论如何翻转,对于每一个2×2的格子来说,如果它的亦或值为1,那么它永远翻不成全黑,否则肯定有一种方案可以使得这个2×2的格子全黑。 想到这里我们就令四个点亦或值为0的格子的左上角权值为1,求一个最大...
arc 081 E Don't Be a Subsequence 题意: 给定一个字符串,求一个最短的串要求没有在该字符串的子串中出现过,如果有多个,输出字典序最小的那一个。 我们可以首先考虑第一问,考虑每一个点,如果这个点会通过加上某个字母转移到,肯定是这个字母在当前位置之前出现的第一个位置,(如果没有出现就是从空字符串中转移而来)。所以感觉这是一个图,我们可以先新建一个点表示最开始求的串为空的状态,再新建一个点表示终止状态,那么我们就是通过一...
arc 082 E ConvexScore 题意:给定平面上的n个点,我们对于每一个能围成凸多边形的子集可以计算它的贡献,贡献为 2 的 (这个凸多边形边上及内部点的个数 - 围成凸多边形点的个数),求所有子集的贡献之和。n<=200。 我们可以先转化一下问题,考虑每一个凸多边形,2 的 (这个凸多边形边上及内部点的个数 - 围成凸多边形点的个数)就是在选了这个凸多边形的情况下,里面其他点任选,那么就是以这个凸多边形为...
arc 083 E Bichrome Tree 题意: 给你一棵以1为根的树,让你将这棵树黑白染色,再给每个点赋一个权值,要求对于每个点,它和它子树中同样颜色的点权值之和要恰好等于x[v],问是否可行。 Miss U 首先我们可以假设点 now 为黑色,如果是白色的话,我们后面的答案稍微换一下即可了。 接着如果我们考虑一个点的子树的时候,如果已经知道了它的颜色(假如是黑色),我们只关心在该情况下...
arc 091 E LISDL 题意:要求你构造一个长度为n的排列,要求它的最长上升子序列长度为a,最长下降子序列长度为b,不合法输出-1。 我们可以先分析一下这个n和a,b在满足什么关系的时候是合法的。 很显然最长上升子序列和最长下降子序列最少可以共用1个位置的数字,那么如果a+b-1大于n了,说明不合法了。 如果我们令dp[i]=以i结尾的最长上升子序列的长度,...
arc092 F Two Faced Edges 题意:给你一个n个点m条边的有向图,问你每条边反向之后联通分量的个数会不会改变。 吐槽一下,感觉atcoder就两种题,一种神奇的计数题,一种题就在问你把第i个啥换掉之后的答案有什么变化,还有就是评测机飞快,比如下面的题正解复杂度就是 2000×200000。 设改变的边 为 u -> v,那么 下列两个条件有且仅有一个成立的时候,答案数量会...
arc 092 E Both Sides Merger 题意:给定一个序列,我们有两种操作,第一种:把第一个或者最后一个元素删除,第二种:把2~n-1中的某个元素替换成它两边元素的和,操作到最后会剩一个元素,求这个元素的最大值是多少。 首先观察到一个性质,第一种操作之后,隔一个的还是一个,隔两个的还是隔着两个,可以视为奇数位偶数位相对不变,第二个操作之后,就相当于把一个奇数位的数删掉,换成两个偶数位的和,事实上奇数偶数位...
arc 093 F Dark Horse 题意: 我们现在有一个有2的n次方的人的淘汰赛,每次相邻的两个人打,赢得人晋级,以此类推到只剩一个人为止。给定一个集合a[i], 规则如下:1号和a[i]的人打a[i]胜,1号和其他人打 1号胜利,其他号和其他的打,字典序小的胜。问1号胜利的方案数有多少种。 我们先假装第一个人就在第一个位置,由于都是从一个2^1的人中取胜,到从2^n的人中取胜,所以一号人在哪方案数...
arc 093 E Bichrome Spanning Tree 题意:你有一个n个点m条边的有向图,你需要给每条边染黑色或者白色,要求,原图必须存在一个由黑边和白边组成的生成树,且在那些由黑边与白边构成的生成树中,最小的生成树的边权为x,问有多少种染色方案。 首先我们可以求一棵原图的最小生成树,令它的权值为 t,显然如果x大于t是无解的,接着我们来讨论t=x 与t<x 的情况。 当t=x的时候,只要某条边...
ZRX的网络流题目总结 PARTI 最大流 例1:bzoj 3931Description路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点。网络中实现路由发的硬件设备称为路由器。为了使数据包最快的到达目的地,路由器需要选择最优的路径转发数据包。例如在常用的路由算法OSPF(开放式最短路径优先)中,路由器会使用经典的Dijkstra算法计算最短路径,然后尽量沿最短路径转发...
bzoj 4009: [HNOI2015]接水果 Description风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果。由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更加难的版本。首先有一个地图,是一棵由 n 个顶点、n-1 条边组成的树(例如图 1给出的树包含 8 个顶点、7 条边)。这颗树上有 P 个盘子,每个盘子实际上是一条路径(例如图 1 中顶点 6 到顶点 8 ...
bzoj 3572: [Hnoi2014]世界树 Description世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界。在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息、持续运转的根本基石。世界树的形态可以用一个数学模型来描述:世界树中有n个种族,种族的编号分别从1到n,分别生活在编号为1到n的聚居地上,种族的编号与其聚居地的编号相同。有的聚居地之间有双向的道路相连,道路...
hdu 4418 Time travel 题意: 开始从x点出发,方向为d,走到数轴的一端会原路折返,总共有n个点,你要去的点为y,输入p[1]-p[m]表示你走了i个点停下来的概率,如果停下来的不是要达到的点就重新开始计算,求走到y号点的期望。 (下面是一种略有问题的思路) 我们设dp[i][0/1]表示从i出发,在向左/右的时候到达终点的期望,显然dp[y][0]=dp[y][1]=0。 ...
bzoj 4011: [HNOI2015]落忆枫音 题意: 给你一个DAG,再给你加一条边,之后图不保证是DAG了,求新图中以一为根的生成树有多少个。 由于原图是个DAG,我们对每个点随机找爹,总能形成一棵生成树,那么答案就是2到n所有点入度的乘积。在加了一条边 x->y 之后,如果再套用这个公式,无非就是多了加了这条边之后与一条y->x的路径构成环的方案。 那么我们可以对于每一条y->...
bzoj 3122: [Sdoi2013]随机数生成器 Description 在学了bsgs之后,我怎么觉得这题的难点是在于怎么求线性同余方程了...在这写一下顺便就当复习一下好了。 线性同余方程大概就是求解 ax=y (mod m) 的x,直观来看好像求个a的逆元乘个y就行了,但是事实上这个方程存在无解的情况,令d=gcd(a,m),如果y不能整除d方程是无解的,否则给y除以d,按上面的方法计算即可。 这...
bzoj 1845: [Cqoi2005] 三角形面积并 Description给出n个三角形,求它们并的面积。 算是第一道比较复杂的计算几何了吧。 先记录一下通过向量的做法利用相似求两条线段交点的方法真是妙啊。 对于凸多边形求面积并似乎都可以使用求出每一个交点,然后利用横坐标相邻两个交点面积不是三角形就是梯形,反正都是线性变化的性质来强行求并。 所以已经说了方法了,把多边形的顶点以及与其他...
bzoj 4820 硬币游戏 Description周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利。大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了。同学们觉得要加强趣味性,所以要找一个同学扔很多很多次硬币,其他同学记录下正反面情况。用H表示正面朝上,用T表示反面朝上,扔很多次硬币后,会得到一个硬币序列。比如HTT表示第一次正面朝上,后两次反面朝上。但扔到什么时候停止呢?大家提议,...
bzoj 4898 [Apio2017]商旅 Description在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴。你被这个城市发达而美丽的市场所深深吸引,决定定居于此,做一个商人。科巴有个集市,集市用从1到N的整数编号,集市之间通过M条单向道路连接,通过每条道路都需要消耗一定的时间。在科巴的集市上,有K种不同的商品,商品用从1到K的整数编号。每个集市对每种商品都有自己的定价,买入和卖出商品的价格可以是不同的。并非每个集...
SNOI2018 滚粗记 DAY 0: 为了早上能多睡一会,在学校旁边定了酒店,结果好像有点不适应的原因,9:30睡觉1:30感觉才睡着,期间除了各种辗转反侧,还体验了学校旁边酒店隔音的差,就像在自己房间一样,听完了隔壁放的电影,好像很煽情的样子...隔音这么差,连毛巾都没有你是怎么收的我325的房费=_=DAY1: 早上被隔壁的闹铃叫醒... T1:诶这题好像每次相当于中间画了一个分界线,那么只...
codeforces 900d Unusual Sequences 题意:要求任意长度的数组,使得其和为x,每个元素gcd=y,求这样数组的数量。 首先,由于每个元素可表示为x[i]*y,所以如果x%y!=0,那么这样的情况是不合法。 所以我们可以将问题转化为求数组元素和为x/y,gcd=1的数组数量。 由插板法可以得到和为x的数字共有2的x-1次方-1个情况。 接着我们可以容斥,减去其含有的...
codeforces 938E Max History 题意:开始m=1,从2->n枚举i,如果a[i]>a[m],ans+=a[m],求a的所有排列中ans之和。 如果我们将a数组从大到小排序,最大的数后面没有比它的数了,所以答案永远不会计算它,接着次大的数字如果想要被计算,那么它必须在最大数的前面,那么最大数在前面与次大数在前面概率相等,均为1/2,那么次大数对所有答案的贡献就是a[2]*n!/2,接着第三...
codeforces 486d Valid Sets 题意:给你一棵树,每个点有一个点权,求最大点-最小点小于等于d的子集个数。 由于复杂度可以支持n方的,所以我们可以通过枚举每一个点,作为根且是里面的最大点,那么我们就可以通过一遍dfs,如果根节点点减去当前点的儿子节点的值<=d,那么由乘法原理可得,当前点的答案可以乘等于当前点儿子节点的答案,即为dp[now]*=(dp[to[i]]+1),由于可以不选,所...
【持续更新】有用的小技能 最近感觉做了一定量的题,里面有好多有意思的小技巧,总结到这个博客里希望能和看到的人共勉。 1.sum%(n*x)%(x)==sum%x,在解决一些取模问题时,可以减小状态的大小,如cf 55d; 2.数字在数组较为散的时候可以使用离散化,可以将一个多维的数组减小一维空间,如cf 55d; 3.在遍历路径时巧妙的规定方向,可以保证不重...
NOIP2016 && bzoj4719天天爱跑步 题目描述小c同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。这个游戏的地图可以看作一一棵包含 nn个结点和 n-1n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达。树上结点编号为从11到nn的连续正整数。现在有mm个玩家,第ii个玩家的起点为 S_iSi,终