摘要:
模拟退火(Simulate Anneal)是一种通用概率演算法,在大的搜索空间内寻找最优解,若新的状态优于当前状态,则将新的状态作为最优解,否则以一定概率接受新的状态。 模拟退火有三个因数,初始温度$T_0$,降温系数$d$,终止温度$T_k$,通常不直接取当前解为最优解,而是维护退火过程中遇到的所 阅读全文
posted @ 2022-11-14 18:07
半步蒟蒻
阅读(362)
评论(0)
推荐(0)
摘要:
前缀函数nxt[i]表示s[0...i]最长相等的真前缀与真后缀的长度。 i-nxt[i]即为s[0...i]的一个周期。 前缀函数求法,j代表的时长度。 下标从0开始。 for(int i=1,j=0;i<n;i++){/*j最次也是前一位的nxt,从前一位失配的位置开始匹配,后缀与前缀不等时一直 阅读全文
posted @ 2022-11-14 18:06
半步蒟蒻
阅读(151)
评论(0)
推荐(0)
摘要:
树状数组每个点管理的区间是$[i-lowbit(i)+1,i]$,一般用单点修改区间查询问题。 单点修改区间查询树状数组。 struct BinaryIndexedTree{ int t[N]; inline int lowbit(int x){ return x&-x; } inline void 阅读全文
posted @ 2022-11-14 18:06
半步蒟蒻
阅读(30)
评论(0)
推荐(0)
摘要:
可持久化线段树,又称主席树,通常用于维护序列和值域。 对于单点修改的可持久化线段树,它主要的思想就是每次新建一个版本,复制一条链。 单点修改和查询历史版本。不能再用$lc$和$rc$记录根节点的左右子树,需要用变量来记录,每次修改最多复制$O(logN)$的链。 struct PersistentS 阅读全文
posted @ 2022-11-14 18:06
半步蒟蒻
阅读(95)
评论(0)
推荐(0)
摘要:
可持久化栈,支持当前时刻入栈、回溯到某一时刻、某时刻出栈。 struct PersistentStack{ int stk[N],tp,pre[N],root[N]; inline void push(int p,int x){/*当前p时刻入栈*/ stk[++tp]=x; root[p]=tp; 阅读全文
posted @ 2022-11-14 18:05
半步蒟蒻
阅读(85)
评论(0)
推荐(0)
摘要:
今天出发去石家庄,大家都很开心,于是在上午考完了学长出的三道IOI题后,大多改完T1就开始颓了。 不久后,虎哥通过对讲机说,陶主任让smtwy在1:45其他学生起床后,带两个人去宿舍扫厕所。 我记得清清楚楚我是拿着水杯下的楼,可是神奇的是到宾馆后行李箱中确确实实没有我的水杯,后来我宁愿相信水杯是丢在 阅读全文
posted @ 2022-11-14 18:05
半步蒟蒻
阅读(55)
评论(0)
推荐(0)
摘要:
treap是一种弱平衡的二叉搜索树,同时符合二叉搜索树和堆的性质,堆一般用随机值的小根堆。 旋转treap在每次有修改操作时,通过比较节点的优先值来决定是否旋转,通过旋转来维持树的平衡。 不维护自身副本数,左子树小于等于根节点,右子树严格大于根节点。 struct Treap{ struct tre 阅读全文
posted @ 2022-11-14 18:04
半步蒟蒻
阅读(86)
评论(0)
推荐(0)
摘要:
字典树$trie$,用于检索字符串是否出现过,也可以检索前缀,对于字符串的$trie$,每个点拥有$26$个儿子,具有相同前缀的字符串共用前缀节点,整棵树的根节点为空,默认只有小写字母。 一般而言,$root$和$tot$是可以初始化为$0$的,但是特殊情况下需要初始化为$1$,故多数时候初始化为$ 阅读全文
posted @ 2022-11-14 18:04
半步蒟蒻
阅读(86)
评论(0)
推荐(0)
摘要:
配对堆是可并堆的一种,支持插入、查询最小值、删除最小值、修改元素,但是无法可持久化。 配对堆是满足堆性质的带权多叉树,使用儿子-兄弟表示法存储。 在删除最小值时,为了保证总的均摊复杂度,需要把儿子们两两配对,再用merge把配成一对的两个儿子合并到一起,再将新产生的堆从右往左挨个合并。 这里的父指针 阅读全文
posted @ 2022-11-14 18:03
半步蒟蒻
阅读(236)
评论(0)
推荐(0)
摘要:
斜堆是可并堆的一种,与左偏树类似,只不过没有零距离的概念,在进行合并时不需要比较左右儿子的dis,直接进行合并即可。 这里的父指针并不是真的维护父亲,而是对于并查集的找根操作,因为只要求删除最小值,所以只需要知道一个集合的根节点即可,于是可以路径压缩。 struct SkewHeap{ struct 阅读全文
posted @ 2022-11-14 18:03
半步蒟蒻
阅读(56)
评论(0)
推荐(0)
摘要:
ST表,Sparse Table,是解决区间最值问题,及RMQ问题的工具,利用倍增思想,O(N*log2(N))预处理,O(1)查询。 设f[i][j]表示从i开始的2^j个数的最值,初始化f[i][0]=a[i],对于处理f数组,首先枚举区间长度j,第二层枚举左端点i,当i+(1<<j)-1>n时 阅读全文
posted @ 2022-11-14 18:02
半步蒟蒻
阅读(96)
评论(0)
推荐(0)
摘要:
中午全体去吃火锅,谁知道以后还会不会有呢?这好像是第一次在12:40的铃声之后回到宿舍的吧。 下午开会前做核酸,偌大的大厅只有我们信奥,在那里等待的四五名蓝衣医务人员,问虎哥“他们什么时候结束啊”,整个年级的其他人都在开三调总结大会,虎哥“可能年级领导总结发言都要习惯性拖延一些吧”,几名蓝衣很有怨言 阅读全文
posted @ 2022-11-14 18:01
半步蒟蒻
阅读(38)
评论(0)
推荐(0)
摘要:
宏定义预处理器,实现简化版预处理器,不包含函数,字符ASCII码范围32~126. namespace JRC{ string solve(string s){ string re=""; for(int i=0,j=0;i<s.size();i+=j){/*每次往后跳一个字符串的长度*/ for( 阅读全文
posted @ 2022-11-14 18:00
半步蒟蒻
阅读(197)
评论(0)
推荐(0)
摘要:
今天三调,不过和我们没有关系,毕竟也不参考。 终于可以考一次年级倒第一了。 中午403的化奥大佬说我们宿舍被通报没有值日,苗要在考完试后停他们两位的课,他觉得停不了我们的课。然而,下午做核算,旺问谁值日,最后的结果显然是我们整个宿舍都要在考完后停课。 kiritokazuto早上不跑操,走之前是墩了 阅读全文
posted @ 2022-11-14 18:00
半步蒟蒻
阅读(40)
评论(1)
推荐(0)
摘要:
$dfs$搜索算法,将要搜索的目标分为若干层,每层基于前几层的状态进行决策直到达到目标状态。 全排列问题。 在回溯时清空标记。 void dfs(int x){ if(x==n+1){ for(auto x:ans)printf("%5d ",x); puts(""); return; } for( 阅读全文
posted @ 2022-11-14 18:00
半步蒟蒻
阅读(58)
评论(0)
推荐(0)
摘要:
笛卡尔树是一种二叉搜索树,同时也满足大根堆或小根堆的性质,Treap也是一种笛卡尔树。 每个节点记录信息(x,y),对于x是二叉搜索树,对于y是小根堆,在x递增的情况下,可以线性时间内构造一颗笛卡尔树。 两个点的lca的权值就是它们在原序列中的RMQ. 笛卡尔树的先序遍历即是原序列,对于下标为数组下 阅读全文
posted @ 2022-11-14 17:59
半步蒟蒻
阅读(349)
评论(1)
推荐(0)
摘要:
Johnson通过另一种方法给每条边重新标注边权。新建一个虚拟结点0,向其他所有点连一条边权为0的边,用Bellman-Ford或SPFA算法求出0到其他所有点的最短路记为gpe[i],对于一条x->y的边权为w的边,将边权重置为w+h[x]-h[y],以每个点为起点,跑n边dijkstra即可,时 阅读全文
posted @ 2022-11-14 17:59
半步蒟蒻
阅读(50)
评论(0)
推荐(0)
摘要:
Prim最小生成树算法,以任意节点为根,找出与之相邻的所有便,再将新节点更新并以此节点为根继续进行,dis为已用点到未用点的最短距离。适用于稠密图,时间复杂度O(N^2)。 inline int prim(){ memset(vis,0,sizeof(vis)); memset(dis,0x3f,s 阅读全文
posted @ 2022-11-14 17:59
半步蒟蒻
阅读(307)
评论(0)
推荐(0)
摘要:
二分图带权匹配的前提是匹配数最大,KM算法的前提是带权最大匹配一定是完备匹配。 顶点标记值,给左部点一个整数值a[i],给右部点一个整数值b[i],同时必须满足对于任意的i,j,a[i]+b[j]>=w(i,j),w(i,j)为i与j之间的边权,无边是为负无穷,a[i]和b[i]称为节点的顶标。 若 阅读全文
posted @ 2022-11-14 17:55
半步蒟蒻
阅读(48)
评论(0)
推荐(0)
摘要:
自从我第一次有意识以来,眼前是一个昏暗的道路,路上敌军挡道,数量众多,我听到一道声音,“这些对她来说,不过是螳臂当车罢了”,果然,身为那为女主人公,一袭白衣,手持长刀,眼前的敌人也只是蝼蚁,没有丝毫阻挡的作用。此时,我不记得我的敌方是否是海盗。 在我第二次有意识以来,我在一艘大海盗船上,父亲便是海盗 阅读全文
posted @ 2022-11-14 17:54
半步蒟蒻
阅读(37)
评论(0)
推荐(0)
摘要:
下午13:55到考场下候场,约十几分钟后进场,之后处理特别像写轮眼的录屏软件,发每个人的考号和密码,进网站。 开考第一件事干什么?登录。第二件呢?睡觉! 发下来的网址登不上去,一直显示用户不存在,特派员兼监考老师说让稍安勿躁,先休息一会,养精蓄锐,全河北省都是这样,等到可以登上去了再叫我们。于是这一 阅读全文
posted @ 2022-11-14 17:54
半步蒟蒻
阅读(27)
评论(0)
推荐(0)
摘要:
基于分块思想,常用的有数列分块,之间分块,以及值域分块 把一个数组分为几个块,块内信息整体保存,两边散块进行暴力 首先进行分块 int len=sqrt(n);/*选择块长,也可以手动调节*/ for(int i=1;i<=n;i++)bl[i]=(i-1)/len+1;/*每个点所属块的编号*/ 阅读全文
posted @ 2022-11-14 17:53
半步蒟蒻
阅读(47)
评论(0)
推荐(0)
摘要:
有n个变量,每一个变量都是bool类型的,除了这n个变量以外,还有m个关系表达式,关系表达式差不多是x1&x2=false。求能否给这n个变量找出一个赋值的方法,使得满足所有的表达式。 将每个变量x拆成false和true两个点。 假设x1&x2=false,则x1和x2必有一个=false,于是连 阅读全文
posted @ 2022-11-14 17:53
半步蒟蒻
阅读(29)
评论(0)
推荐(0)
摘要:
分块优化vector实现平衡树,当一个vector的大小超过定长的一半时将其分裂一半,删除时进行合并操作。 但是,对于块长需要一定的人品,在数据范围1e6时,取sz=1000和1600可以,但是800或2000都不行。 template<const int sz=1600,const int inf 阅读全文
posted @ 2022-11-14 17:53
半步蒟蒻
阅读(60)
评论(0)
推荐(0)
摘要:
SizeBalancedTree是通过维护节点大小来保持平衡的二叉搜索树,平衡的条件是任意节点的size不小于其兄弟节点的所有子节点的size。 重点在于时间复杂度均摊O(1)的maintain函数。 对于每个节点,若左子树的左子树的节点数大于右子树的节点,需要右旋根来平衡。 若左子树的右子树的节点 阅读全文
posted @ 2022-11-14 17:52
半步蒟蒻
阅读(85)
评论(0)
推荐(0)
摘要:
$CDQ$分治常用于解决多维偏序关系问题,以三维为例,第一维可以排序解决,第二维进行分治,第三位常用数据结构(树状数组)维护,于是也可以将动态带修改问题,离线处理,常默认时间为第一维。 由于许多时候同一个操作要分成多个操作来解决,所以要格外注意结构体数组的大小是否恰当,同时留意树状数组的边界。 $C 阅读全文
posted @ 2022-11-14 17:52
半步蒟蒻
阅读(122)
评论(0)
推荐(0)
摘要:
用于求解具有单调性的从一堆物品中恰好选$need$个且满足权值最大/小化等要求的问题。 无向带权连通图,每条边是黑色或白色。求一棵最小权的恰好有$need$条白色边的生成树。 二分给白边加上的权值,加的权值越大,最小生成树中白边数量越少,明显具有单调性。 #include<bits/stdc++.h 阅读全文
posted @ 2022-11-14 17:51
半步蒟蒻
阅读(58)
评论(0)
推荐(0)
摘要:
点分治适用于处理大规模的无修改的树上路径信息。 钦定一个点作为根节点,路径有且仅有两种情况: 经过根节点,即由两颗子树构成 不经过根节点,即只在根节点的一颗子树之中 对于情况1,直接计算即可。对于情况2,我们需要枚举其它点作为根来计算这种情况,为了让递归枚举根的层数最少,我们选择每次选择子树的重心作 阅读全文
posted @ 2022-11-14 17:51
半步蒟蒻
阅读(119)
评论(0)
推荐(0)
摘要:
整体二分是将所有操作离线下来,对多组询问同时进行二分。 将所有操作按照时间顺序存入数组,设$[st,ed]$为答案的定义域,即询问的区间,$[l,r]$为答案的值域。 二分答案的值域,对于每个询问去比较和$mid$的关系,据此判断是递归进入值域$[l,mid]$还是值域$[mid+1,r]$,当$l 阅读全文
posted @ 2022-11-14 17:50
半步蒟蒻
阅读(208)
评论(0)
推荐(0)
摘要:
左偏树是可并堆的一种,支持在O(log2(N))的时间复杂度内进行合并的堆式数据结构。 定义外结点:lc或rc为空结点。 定义零距离:x的距离dis[x]为x子树内与x最近的外结点到x的距离,空结点dis=-1. 左偏树具有堆性质,若为小根堆,对于所有x,v[x]<=v[lc],v[x]<=v[rc 阅读全文
posted @ 2022-11-14 17:49
半步蒟蒻
阅读(38)
评论(0)
推荐(0)
摘要:
最小斯坦纳树,是在无向图中,花费最小的代价,联通给定的k个关键点,组合优化问题 答案一定是一棵树,若存在环,则其中任意一条边可以删去且答案变小 状压dp,设f[i][s]为以i为根的子树包含几何状态s的最小花费,分类讨论转移: 1. i的度数为1,枚举树上与i相邻的点j,用f[j][s]+f[j][ 阅读全文
posted @ 2022-11-14 17:49
半步蒟蒻
阅读(69)
评论(0)
推荐(0)
摘要:
回文树(EER Tree,Palindromic Tree)亦称回文自动机,用于存储一个串中的所有回文子串。 由于回文串可能有奇有偶,于是分为两棵树进行构建,偶跟编号为0,长度为0,fail指向奇根,奇根编号为1,长度为-1,fail指向自身。 fail指向的是该节点的最长回文后缀,新加入字符时跳f 阅读全文
posted @ 2022-11-14 17:48
半步蒟蒻
阅读(90)
评论(0)
推荐(0)
摘要:
一般常用SPFA 对于求最大值 当然要跑最短路 每个不等式转化为a-b<=x 连边b->a,val=x dis[a]>dis[b]+x才能松弛为 dis[a]<=dis[b]+x 当求最小值时 就跑最长路 每个不等式转化为a-b>=x 连边b->a,val=x dis[a]<dis[b]+x才能松弛 阅读全文
posted @ 2022-11-14 17:48
半步蒟蒻
阅读(25)
评论(0)
推荐(0)
摘要:
通过在字符串之间的每个空位内插入字符,是的奇数和偶数成为一样得情况,从而能够统一处理。 用len[]记录每个点能够扩展出的最长半径,mx记录扩展到的最远右端点,id记录mx为右端点时的mid,即对称轴,设i关于mid的对称轴为j。 关于i和mx的位置进行分类讨论: 若i在mx右边,则直接进行暴力。 阅读全文
posted @ 2022-11-14 17:48
半步蒟蒻
阅读(35)
评论(0)
推荐(0)
摘要:
AC自动机以trie为基础,首先将若干模式串插入trie树中,之后构建fail指针和AC自动机,即由trie树变为trie图。 fail指针的定义是,对于当前点x,从根到x形成的字符串为s,x的fail指针指向y,其中满足根到y形成的字符串t是s的最长后缀。 BFS构建AC自动机,第二层的所有节点的 阅读全文
posted @ 2022-11-14 17:48
半步蒟蒻
阅读(79)
评论(0)
推荐(0)
摘要:
struct Vector{ double x,y; const double pi=acos(-1),eps=1e-10; inline Vector(double a=0,double b=0):x(a),y(b){} inline Vector operator=(Vector a){ ret 阅读全文
posted @ 2022-11-14 17:48
半步蒟蒻
阅读(76)
评论(0)
推荐(0)
摘要:
hash函数,通常用于将字符串映射到整数的函数,一般将值域映射到1e9或1e18以内,尽量避免哈希冲突并且便于比较。 选取哈希进制base和模数mod,尽量选取质数,对于一个字符串s的哈希值就是f(s)=sum(i=1->l)(s[i]*base^(l-i)%mod). 比较两个字符串相等时,可以直 阅读全文
posted @ 2022-11-14 17:48
半步蒟蒻
阅读(807)
评论(0)
推荐(1)
摘要:
1.对于取模中有减法的操作,要加上$mod$再$%mod$,不然会有极大概率出现负数 2.对于有关组合数的预处理中,$facinv[N]=po(fac[N],mod-2,mod)$,注意是$N!$的$mod-2$次幂,而不是$N$的$mod-2$次幂 3.对于递归分治之类的函数,如果写非$void$ 阅读全文
posted @ 2022-11-14 17:45
半步蒟蒻
阅读(121)
评论(0)
推荐(0)
摘要:
Kruscal最小生成树算法,将边按照权值进行排序,每次贪心优先选择权值较小的边,并依次连接,若出现环则跳过,边数达到节点数-1时即可停止。时间复杂度O(Mlog2(M)) inline int kruskal(){/*最小生成树用于无向图,连边时可以按照单向边来连*/ sort(e+1,e+1+t 阅读全文
posted @ 2022-11-14 17:44
半步蒟蒻
阅读(95)
评论(0)
推荐(0)
摘要:
带修莫队,用于支持单点修改修改的区间查询,块长大小一般n的2/3次方理论最优,排序时先按l,再按r,最后按t升序排列 询问区间内不同颜色数,单点修改成另一颜色 #include<bits/stdc++.h> using namespace std; const int N=2e6+6; int n, 阅读全文
posted @ 2022-11-14 17:44
半步蒟蒻
阅读(53)
评论(0)
推荐(0)
摘要:
莫队,对询问离线并进行合理的排序,处理完一个区间的询问后,可以以常数的时间复杂度转移到下一个询问的答案,通常初始化l=1,r=0,奇偶化排序 离线询问结构体 struct ask{ int l,r,t,ans;/*如果每个询问不需要拆成多个,那么可以直接在这里记录答案*/ inline bool f 阅读全文
posted @ 2022-11-14 17:43
半步蒟蒻
阅读(28)
评论(0)
推荐(0)
摘要:
struct Matrix{ int n,m,mod,a[N][N]; inline Matrix(int x=0,int y=0,int p=0){ memset(a,0,sizeof(a)); n=x,m=y,mod=p; } inline void reset(int x,int y,int 阅读全文
posted @ 2022-11-14 17:43
半步蒟蒻
阅读(107)
评论(0)
推荐(0)
摘要:
多源最短路,Floyed本质是dp,通过不断的松弛操作来获得最优,时间复杂度O(N^3)。 memset(w,0x3f,sizeof(w));/*初始化正无穷*/ for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>w[i][j]; for(int i=1; 阅读全文
posted @ 2022-11-14 17:42
半步蒟蒻
阅读(102)
评论(0)
推荐(0)
摘要:
一张图是二分图们当且仅当它的点可以被分成两部分,而所有的变的两个端点都分属不同部分,分为左部和右部。 一张图的一个匹配是一些没有公共端点的边。 匈牙利算法是枚举每一个左部点x没然后枚举x所连的边,对应出点y,若y没有被先前的左点匹配,直接将x匹配y,否则尝试让y的原配左点去匹配其他右点,若原配匹配到 阅读全文
posted @ 2022-11-14 17:42
半步蒟蒻
阅读(138)
评论(0)
推荐(0)
摘要:
spfa最短路算法,可以判断负环,平均时间复杂度O(kE),k<=2,被卡时间复杂度O(VE) inline void spfa(int s){/*以s为源点的单源最短路*/ queue<int>q; memset(in,0,sizeof(in));/*清空标记*/ memset(dis,0x3f, 阅读全文
posted @ 2022-11-14 17:42
半步蒟蒻
阅读(117)
评论(0)
推荐(0)
摘要:
单源最短路,Dijkstra是基于贪心的思想,首先用dis[]记录源点到每个点的最短路径,再用一个数组保存已找到的最短路径的点,然后从dis中找最小值,该值则是源点到该值对应顶点的最短路径,并标记该店为已找到的最短路,选择最小值时,可以用线段树、平衡树、堆来进行优化,适用于无负权的图,时间复杂度O( 阅读全文
posted @ 2022-11-14 17:42
半步蒟蒻
阅读(134)
评论(0)
推荐(0)
摘要:
线段树扫描线,矩形面积并,面积的求法模拟扫描线从下向上扫过图形,并快速计算当前扫描线被截得的长度。将横边赋上不同的权值,下边为1,上边为-1。所有横边按照y坐标生序排序,每次先碰到下边,再碰到上边。 矩形周长并,纵边总长度=sum(2被截的线段条数扫过的高度),横边总长度=sum(|上次截得的总长- 阅读全文
posted @ 2022-11-14 17:41
半步蒟蒻
阅读(55)
评论(0)
推荐(0)
摘要:
树链剖分是将一棵树分成几条链,把树形变为线性以减少处理难度。 对于轻重链剖分,每个非叶子节点的儿子中儿子数量最多的那个儿子为重儿子,其余所有儿子为轻儿子。 重边指连接两个重儿子的边,其余的边为轻边。 重链指相邻重边连起来的一条重儿子的链。 每一条重链以轻儿子为起点。 dfs序中子树的dfs序是连续的 阅读全文
posted @ 2022-11-14 17:41
半步蒟蒻
阅读(131)
评论(0)
推荐(0)
摘要:
动态开点线段树,只有需要用到一个点才新建该点,否则不进行构建,可以节省空间复杂度。 class SegmentTree{ struct tree{ int l,r,sz; }t[N<<2]; int tot,s[N<<2],root[N],rtc=1,L=-1e7,R=1e7; #define l( 阅读全文
posted @ 2022-11-14 17:40
半步蒟蒻
阅读(180)
评论(0)
推荐(0)
摘要:
对于多次询问,vis[]等可以不用memset,可用标号法以节省时间 whlie(q--){ for(int i=l;i<=r;i++) if(vis[a[i]]!=q)ans++,vis[a[i]]=q; } 手动开O2 #pragma GCC optimize(2) 矩形判断相交 inline 阅读全文
posted @ 2022-11-14 17:40
半步蒟蒻
阅读(44)
评论(1)
推荐(0)
摘要:
tarjan求无向图割点,若x是根节点,则子树个数>1时x时割点;若x是非根节点,当ipt[x]<=low[y]时x是割点,说明y的子树无法通过非父子边回溯到x的祖先,那么删掉x,图将分裂成两个字图,即x是割点。 void tarjan(int x,int root){ ipt[x]=low[x]= 阅读全文
posted @ 2022-11-14 17:37
半步蒟蒻
阅读(202)
评论(0)
推荐(2)
摘要:
链式栈 template<class T> class Stack{ struct Link{ Link(){data=0;p=nullptr;} Link(const T&n,Link*np=nullptr){data=n;p=np;} T data; Link*p; }; Link*tp; un 阅读全文
posted @ 2022-11-14 17:17
半步蒟蒻
阅读(53)
评论(1)
推荐(0)
摘要:
并查集本质上是维护一个森林,初始时森林里每个点是一个集合,之后将集合合并,查找一个点所在集合的代表元素,将两个集合的代表元素进行合并。使用时不要忘记初始化! 在一般情况下,可以使用路径压缩与按秩合并或启发式合并。 struct DSU{ int f[N<<1],sz[N<<1],rk[N]; inl 阅读全文
posted @ 2022-11-14 16:47
半步蒟蒻
阅读(48)
评论(2)
推荐(0)
该文被密码保护。 阅读全文
posted @ 2022-11-14 14:23
半步蒟蒻
阅读(0)
评论(0)
推荐(0)

浙公网安备 33010602011771号