11 2022 档案
摘要:求关注啊! 蒟蒻可不想刚注册博客园一个月之后AFO结果才零星的关注啊!
阅读全文
摘要:####AFO于2022.11.24 ####死因:CSP崩掉+noip取消 上午模拟赛,下午改题,约16点左右,我和bikuhiku出门去讲题 看到两位教练在走廊商讨问题,我回头看到他们看了我一眼,但并没有言语 讲完题后回到二机房,不久,huge进来了 开口第一句“还有上厕所出去讲题的吗?都在这了
阅读全文
摘要:仅适用于整形的读入输出以及单个字符的输出,对于字符串类型,$fread$有大概率会出现未知原因错误,不用于读入字符串型。 namespace FIO{ constexpr int SZ=1<<22; char inbuf[SZ],outbuf[SZ],*s=inbuf,*t=inbuf,*p=out
阅读全文
摘要:康拓展开用于求一个排列在所有排列中的排名。 也常用与哈希。 $rank=\sum_{i=1}^{n}sum_{a_i}(n-i)!$,其中 $sum_{a_i}$ 表示在 $i$ 之后的,且值比 $a_i$ 小的数的个数。 对于排名,一位一位进行考虑。 设当前考虑到第 $i$ 位,比 $a_i$ 小
阅读全文
摘要:光速幂,在 $O(\sqrt n)$ 的时间复杂度内预处理,以 $O(1)$ 的时间复杂度求幂,用于求解同一底数和模数,多次求幂。 假设底数为 $x$,模数为 $p$,首先预处理 $x^0,x^1,x^2...x^{\sqrt n}$,再预处理 $x^0,x^{\sqrt n},x^{2\sqrt
阅读全文
摘要:求解 $a^x\equiv b(\mod p)$. 大步小步算法,$BSGS(baby-step giant-step)$,要求 $gcd(a,p)=1$,可在 $O(\sqrt p)$ 时间复杂度内求解。 在 $p<=10^{16}$ 时没有大问题。 方程的解满足 $0<=x<p$. 令 $t=\
阅读全文
摘要:####Lucas定理 用于求解大组合数取模且模数为质数的情况。 定理,$\binom{n}{m}=\binom{\left \lfloor \frac{n}{p}\right \rfloor}{\left \lfloor \frac{m}{p}\right \rfloor}*\binom{n\mo
阅读全文
摘要:中国剩余定理,$Chinese Remainder Theorem, CRT$,用于求解模数两两互质的一元线性同余方程组。 $x\equiv a_1(\mod n_1)$ $x\equiv a_2(\mod n_2)$ $x\equiv a_k(\mod n_k)$ 计算所有模数的积 $n$. 对于
阅读全文
摘要:形如 $ax\equiv b(\mod n)$ 的方程称为线性同余方程,从区间 $[0,n-1]$ 中求解 $x$. 逆元求解。 假设 $gcd(a,n)=1$,两边同时乘上 $a^{-1}$ 即可。 设 $g=gcd(a,n)$,左侧始终可以 被 $g$ 整除,若右侧不可则无解。 若右侧可以被 $
阅读全文
摘要:若线性同余方程 $ax\equiv1(\mod b)$,则称 $x$ 为 $a\mod b$时的逆元,记作$a^{-1}$。 扩展欧几里得求逆元。 要求 $gcd(a,b)=1$. int exgcd(int a,int b,int&x,int&y){ if(!b)return x=1,y=0,a;
阅读全文
摘要:裴蜀定理,又名贝祖定理。 对于整数 $(a,b)$,一定存在整数 $(x,y)$,满足 $ax+by=gcd(a,b)$. 推广到多个式子也一样成立。 P4549 【模板】裴蜀定理 给定一个序列 $a_i$,构造一个等长的序列 $x_i$,使得 $\sum_{i=1}^{n}{a_i*x_i}$ 最
阅读全文
摘要:欧拉函数 欧拉函数 $\phi(n)$ 表示小于等于 $n$ 的和 $n$ 互质的数的个数。 求一个数 $n$ 的欧拉函数,设将 $n$ 质因数分解后的质因数集合为 $p_{1...m}$ ,则 $\phi(n)=n*\prod_{i=1}^{m}\frac{p_i-1}{p_i}$. inline
阅读全文
摘要:数论分块 对于含有除法向下取整的式子,可以使用数论分块,将 $\left \lfloor \frac{n}{i} \right \rfloor$ 相同的数统一计算。 使式子 $\left \lfloor \frac{n}{i} \right \rfloor = \left \lfloor \frac
阅读全文
摘要:最大公约数 欧几里得算法 对于两个数 $a,b$,设 $a>b$,当 $a%b==0$ 时,答案为 $b$。 否则,设 $a=b*q+r,r<b$,则 $gcd(a,b)=gcd(b,a%b)$ ,时间复杂度 $O(\log N)$ 递归写法 int gcd(int x,int y){ return
阅读全文
摘要:积性函数 若函数 $f(1)=1$,并且对于 $gcd(x,y)=1,f(xy)=f(x)*f(y)$,则 $f(i)$ 为积性函数。 若函数 $f(1)=1$,并且 $f(xy)=f(x)*f(y)$,则 $f(i)$ 为完全积性函数。 除数函数,欧拉函数为积性函数。 判断单个素数 inline
阅读全文
摘要:无旋treap的核心操作时分裂与合并,分裂分为按值分裂和按排名分裂,按值分裂用于维护权值平衡树,按排名分裂用于维护序列。 按值分裂平衡树。 struct Treap{ struct tree{ int l,r,v,p/*随机值*/,w; }t[N]; int tot,root,INF=0x7ffff
阅读全文
摘要:树上启发式合并,$DSU$ $On$ $Tree$,静态链分治,用于求解支持离线的树上子树查询问题。 暴力做法,每次做完一棵树就要把它清空,避免对它兄弟造成影响,但是做到它的祖先时又会重新对它做一遍,发现最后一棵树是不需要清空的,于是考虑将节点数最多的留到最后。 首先对树进行轻重链剖分,找出重儿子,
阅读全文
摘要:##密码是一个和博主有关的人名的首拼## 温馨提示: 有姓有名还有字,千红一窟万艳杯。
阅读全文
摘要:标准库: 1.栈$stack$ top()//取栈顶元素 push()//压入元素 emplace()//压入元素至栈顶 s1.swap(s2)//交换两个栈 size()//栈中元素个数 empty()//判空 pop()//弹出栈顶元素 =,!=,==,>,<,>=,<= 2.队列$queue$
阅读全文
摘要:最短路径树,即$Shortest$ $Path$ $Tree$,对于一张无向图,固定一个源点,树上每个点到源点的最短距离都等于原图中该点到源点的最短距离。 最短路径树是所有路径树中边权和最小的。 通常使用$dijkstra$算法来找出$SPT$,在每次松弛操作时,如果松弛成功,记该点的前驱边的编号,
阅读全文
摘要:模拟退火(Simulate Anneal)是一种通用概率演算法,在大的搜索空间内寻找最优解,若新的状态优于当前状态,则将新的状态作为最优解,否则以一定概率接受新的状态。 模拟退火有三个因数,初始温度$T_0$,降温系数$d$,终止温度$T_k$,通常不直接取当前解为最优解,而是维护退火过程中遇到的所
阅读全文
摘要:前缀函数nxt[i]表示s[0...i]最长相等的真前缀与真后缀的长度。 i-nxt[i]即为s[0...i]的一个周期。 前缀函数求法,j代表的时长度。 下标从0开始。 for(int i=1,j=0;i<n;i++){/*j最次也是前一位的nxt,从前一位失配的位置开始匹配,后缀与前缀不等时一直
阅读全文
摘要:可持久化线段树,又称主席树,通常用于维护序列和值域。 对于单点修改的可持久化线段树,它主要的思想就是每次新建一个版本,复制一条链。 单点修改和查询历史版本。不能再用$lc$和$rc$记录根节点的左右子树,需要用变量来记录,每次修改最多复制$O(logN)$的链。 struct PersistentS
阅读全文
摘要:树状数组每个点管理的区间是$[i-lowbit(i)+1,i]$,一般用单点修改区间查询问题。 单点修改区间查询树状数组。 struct BinaryIndexedTree{ int t[N]; inline int lowbit(int x){ return x&-x; } inline void
阅读全文
摘要:可持久化栈,支持当前时刻入栈、回溯到某一时刻、某时刻出栈。 struct PersistentStack{ int stk[N],tp,pre[N],root[N]; inline void push(int p,int x){/*当前p时刻入栈*/ stk[++tp]=x; root[p]=tp;
阅读全文
摘要:今天出发去石家庄,大家都很开心,于是在上午考完了学长出的三道IOI题后,大多改完T1就开始颓了。 不久后,虎哥通过对讲机说,陶主任让smtwy在1:45其他学生起床后,带两个人去宿舍扫厕所。 我记得清清楚楚我是拿着水杯下的楼,可是神奇的是到宾馆后行李箱中确确实实没有我的水杯,后来我宁愿相信水杯是丢在
阅读全文
摘要:treap是一种弱平衡的二叉搜索树,同时符合二叉搜索树和堆的性质,堆一般用随机值的小根堆。 旋转treap在每次有修改操作时,通过比较节点的优先值来决定是否旋转,通过旋转来维持树的平衡。 不维护自身副本数,左子树小于等于根节点,右子树严格大于根节点。 struct Treap{ struct tre
阅读全文
摘要:字典树$trie$,用于检索字符串是否出现过,也可以检索前缀,对于字符串的$trie$,每个点拥有$26$个儿子,具有相同前缀的字符串共用前缀节点,整棵树的根节点为空,默认只有小写字母。 一般而言,$root$和$tot$是可以初始化为$0$的,但是特殊情况下需要初始化为$1$,故多数时候初始化为$
阅读全文
摘要:配对堆是可并堆的一种,支持插入、查询最小值、删除最小值、修改元素,但是无法可持久化。 配对堆是满足堆性质的带权多叉树,使用儿子-兄弟表示法存储。 在删除最小值时,为了保证总的均摊复杂度,需要把儿子们两两配对,再用merge把配成一对的两个儿子合并到一起,再将新产生的堆从右往左挨个合并。 这里的父指针
阅读全文
摘要:斜堆是可并堆的一种,与左偏树类似,只不过没有零距离的概念,在进行合并时不需要比较左右儿子的dis,直接进行合并即可。 这里的父指针并不是真的维护父亲,而是对于并查集的找根操作,因为只要求删除最小值,所以只需要知道一个集合的根节点即可,于是可以路径压缩。 struct SkewHeap{ struct
阅读全文
摘要: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时
阅读全文
摘要:中午全体去吃火锅,谁知道以后还会不会有呢?这好像是第一次在12:40的铃声之后回到宿舍的吧。 下午开会前做核酸,偌大的大厅只有我们信奥,在那里等待的四五名蓝衣医务人员,问虎哥“他们什么时候结束啊”,整个年级的其他人都在开三调总结大会,虎哥“可能年级领导总结发言都要习惯性拖延一些吧”,几名蓝衣很有怨言
阅读全文
摘要:宏定义预处理器,实现简化版预处理器,不包含函数,字符ASCII码范围32~126. namespace JRC{ string solve(string s){ string re=""; for(int i=0,j=0;i<s.size();i+=j){/*每次往后跳一个字符串的长度*/ for(
阅读全文
摘要:今天三调,不过和我们没有关系,毕竟也不参考。 终于可以考一次年级倒第一了。 中午403的化奥大佬说我们宿舍被通报没有值日,苗要在考完试后停他们两位的课,他觉得停不了我们的课。然而,下午做核算,旺问谁值日,最后的结果显然是我们整个宿舍都要在考完后停课。 kiritokazuto早上不跑操,走之前是墩了
阅读全文
摘要:$dfs$搜索算法,将要搜索的目标分为若干层,每层基于前几层的状态进行决策直到达到目标状态。 全排列问题。 在回溯时清空标记。 void dfs(int x){ if(x==n+1){ for(auto x:ans)printf("%5d ",x); puts(""); return; } for(
阅读全文
摘要:笛卡尔树是一种二叉搜索树,同时也满足大根堆或小根堆的性质,Treap也是一种笛卡尔树。 每个节点记录信息(x,y),对于x是二叉搜索树,对于y是小根堆,在x递增的情况下,可以线性时间内构造一颗笛卡尔树。 两个点的lca的权值就是它们在原序列中的RMQ. 笛卡尔树的先序遍历即是原序列,对于下标为数组下
阅读全文
摘要:Johnson通过另一种方法给每条边重新标注边权。新建一个虚拟结点0,向其他所有点连一条边权为0的边,用Bellman-Ford或SPFA算法求出0到其他所有点的最短路记为gpe[i],对于一条x->y的边权为w的边,将边权重置为w+h[x]-h[y],以每个点为起点,跑n边dijkstra即可,时
阅读全文
摘要:Prim最小生成树算法,以任意节点为根,找出与之相邻的所有便,再将新节点更新并以此节点为根继续进行,dis为已用点到未用点的最短距离。适用于稠密图,时间复杂度O(N^2)。 inline int prim(){ memset(vis,0,sizeof(vis)); memset(dis,0x3f,s
阅读全文
摘要:二分图带权匹配的前提是匹配数最大,KM算法的前提是带权最大匹配一定是完备匹配。 顶点标记值,给左部点一个整数值a[i],给右部点一个整数值b[i],同时必须满足对于任意的i,j,a[i]+b[j]>=w(i,j),w(i,j)为i与j之间的边权,无边是为负无穷,a[i]和b[i]称为节点的顶标。 若
阅读全文
摘要:自从我第一次有意识以来,眼前是一个昏暗的道路,路上敌军挡道,数量众多,我听到一道声音,“这些对她来说,不过是螳臂当车罢了”,果然,身为那为女主人公,一袭白衣,手持长刀,眼前的敌人也只是蝼蚁,没有丝毫阻挡的作用。此时,我不记得我的敌方是否是海盗。 在我第二次有意识以来,我在一艘大海盗船上,父亲便是海盗
阅读全文
摘要:下午13:55到考场下候场,约十几分钟后进场,之后处理特别像写轮眼的录屏软件,发每个人的考号和密码,进网站。 开考第一件事干什么?登录。第二件呢?睡觉! 发下来的网址登不上去,一直显示用户不存在,特派员兼监考老师说让稍安勿躁,先休息一会,养精蓄锐,全河北省都是这样,等到可以登上去了再叫我们。于是这一
阅读全文
摘要:基于分块思想,常用的有数列分块,之间分块,以及值域分块 把一个数组分为几个块,块内信息整体保存,两边散块进行暴力 首先进行分块 int len=sqrt(n);/*选择块长,也可以手动调节*/ for(int i=1;i<=n;i++)bl[i]=(i-1)/len+1;/*每个点所属块的编号*/
阅读全文
摘要:有n个变量,每一个变量都是bool类型的,除了这n个变量以外,还有m个关系表达式,关系表达式差不多是x1&x2=false。求能否给这n个变量找出一个赋值的方法,使得满足所有的表达式。 将每个变量x拆成false和true两个点。 假设x1&x2=false,则x1和x2必有一个=false,于是连
阅读全文
摘要:分块优化vector实现平衡树,当一个vector的大小超过定长的一半时将其分裂一半,删除时进行合并操作。 但是,对于块长需要一定的人品,在数据范围1e6时,取sz=1000和1600可以,但是800或2000都不行。 template<const int sz=1600,const int inf
阅读全文
摘要:SizeBalancedTree是通过维护节点大小来保持平衡的二叉搜索树,平衡的条件是任意节点的size不小于其兄弟节点的所有子节点的size。 重点在于时间复杂度均摊O(1)的maintain函数。 对于每个节点,若左子树的左子树的节点数大于右子树的节点,需要右旋根来平衡。 若左子树的右子树的节点
阅读全文
摘要:$CDQ$分治常用于解决多维偏序关系问题,以三维为例,第一维可以排序解决,第二维进行分治,第三位常用数据结构(树状数组)维护,于是也可以将动态带修改问题,离线处理,常默认时间为第一维。 由于许多时候同一个操作要分成多个操作来解决,所以要格外注意结构体数组的大小是否恰当,同时留意树状数组的边界。 $C
阅读全文
摘要:点分治适用于处理大规模的无修改的树上路径信息。 钦定一个点作为根节点,路径有且仅有两种情况: 经过根节点,即由两颗子树构成 不经过根节点,即只在根节点的一颗子树之中 对于情况1,直接计算即可。对于情况2,我们需要枚举其它点作为根来计算这种情况,为了让递归枚举根的层数最少,我们选择每次选择子树的重心作
阅读全文
摘要:用于求解具有单调性的从一堆物品中恰好选$need$个且满足权值最大/小化等要求的问题。 无向带权连通图,每条边是黑色或白色。求一棵最小权的恰好有$need$条白色边的生成树。 二分给白边加上的权值,加的权值越大,最小生成树中白边数量越少,明显具有单调性。 #include<bits/stdc++.h
阅读全文
摘要:整体二分是将所有操作离线下来,对多组询问同时进行二分。 将所有操作按照时间顺序存入数组,设$[st,ed]$为答案的定义域,即询问的区间,$[l,r]$为答案的值域。 二分答案的值域,对于每个询问去比较和$mid$的关系,据此判断是递归进入值域$[l,mid]$还是值域$[mid+1,r]$,当$l
阅读全文
摘要:左偏树是可并堆的一种,支持在O(log2(N))的时间复杂度内进行合并的堆式数据结构。 定义外结点:lc或rc为空结点。 定义零距离:x的距离dis[x]为x子树内与x最近的外结点到x的距离,空结点dis=-1. 左偏树具有堆性质,若为小根堆,对于所有x,v[x]<=v[lc],v[x]<=v[rc
阅读全文
摘要:最小斯坦纳树,是在无向图中,花费最小的代价,联通给定的k个关键点,组合优化问题 答案一定是一棵树,若存在环,则其中任意一条边可以删去且答案变小 状压dp,设f[i][s]为以i为根的子树包含几何状态s的最小花费,分类讨论转移: 1. i的度数为1,枚举树上与i相邻的点j,用f[j][s]+f[j][
阅读全文
摘要:回文树(EER Tree,Palindromic Tree)亦称回文自动机,用于存储一个串中的所有回文子串。 由于回文串可能有奇有偶,于是分为两棵树进行构建,偶跟编号为0,长度为0,fail指向奇根,奇根编号为1,长度为-1,fail指向自身。 fail指向的是该节点的最长回文后缀,新加入字符时跳f
阅读全文
摘要:一般常用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才能松弛
阅读全文
摘要:通过在字符串之间的每个空位内插入字符,是的奇数和偶数成为一样得情况,从而能够统一处理。 用len[]记录每个点能够扩展出的最长半径,mx记录扩展到的最远右端点,id记录mx为右端点时的mid,即对称轴,设i关于mid的对称轴为j。 关于i和mx的位置进行分类讨论: 若i在mx右边,则直接进行暴力。
阅读全文
摘要:AC自动机以trie为基础,首先将若干模式串插入trie树中,之后构建fail指针和AC自动机,即由trie树变为trie图。 fail指针的定义是,对于当前点x,从根到x形成的字符串为s,x的fail指针指向y,其中满足根到y形成的字符串t是s的最长后缀。 BFS构建AC自动机,第二层的所有节点的
阅读全文
摘要: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
阅读全文
摘要:hash函数,通常用于将字符串映射到整数的函数,一般将值域映射到1e9或1e18以内,尽量避免哈希冲突并且便于比较。 选取哈希进制base和模数mod,尽量选取质数,对于一个字符串s的哈希值就是f(s)=sum(i=1->l)(s[i]*base^(l-i)%mod). 比较两个字符串相等时,可以直
阅读全文
摘要:1.对于取模中有减法的操作,要加上$mod$再$%mod$,不然会有极大概率出现负数 2.对于有关组合数的预处理中,$facinv[N]=po(fac[N],mod-2,mod)$,注意是$N!$的$mod-2$次幂,而不是$N$的$mod-2$次幂 3.对于递归分治之类的函数,如果写非$void$
阅读全文
摘要:Kruscal最小生成树算法,将边按照权值进行排序,每次贪心优先选择权值较小的边,并依次连接,若出现环则跳过,边数达到节点数-1时即可停止。时间复杂度O(Mlog2(M)) inline int kruskal(){/*最小生成树用于无向图,连边时可以按照单向边来连*/ sort(e+1,e+1+t
阅读全文
摘要:带修莫队,用于支持单点修改修改的区间查询,块长大小一般n的2/3次方理论最优,排序时先按l,再按r,最后按t升序排列 询问区间内不同颜色数,单点修改成另一颜色 #include<bits/stdc++.h> using namespace std; const int N=2e6+6; int n,
阅读全文
摘要:莫队,对询问离线并进行合理的排序,处理完一个区间的询问后,可以以常数的时间复杂度转移到下一个询问的答案,通常初始化l=1,r=0,奇偶化排序 离线询问结构体 struct ask{ int l,r,t,ans;/*如果每个询问不需要拆成多个,那么可以直接在这里记录答案*/ inline bool f
阅读全文
摘要: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
阅读全文
摘要:多源最短路,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;
阅读全文
摘要:一张图是二分图们当且仅当它的点可以被分成两部分,而所有的变的两个端点都分属不同部分,分为左部和右部。 一张图的一个匹配是一些没有公共端点的边。 匈牙利算法是枚举每一个左部点x没然后枚举x所连的边,对应出点y,若y没有被先前的左点匹配,直接将x匹配y,否则尝试让y的原配左点去匹配其他右点,若原配匹配到
阅读全文
摘要:spfa最短路算法,可以判断负环,平均时间复杂度O(kE),k<=2,被卡时间复杂度O(VE) inline void spfa(int s){/*以s为源点的单源最短路*/ queue<int>q; memset(in,0,sizeof(in));/*清空标记*/ memset(dis,0x3f,
阅读全文
摘要:单源最短路,Dijkstra是基于贪心的思想,首先用dis[]记录源点到每个点的最短路径,再用一个数组保存已找到的最短路径的点,然后从dis中找最小值,该值则是源点到该值对应顶点的最短路径,并标记该店为已找到的最短路,选择最小值时,可以用线段树、平衡树、堆来进行优化,适用于无负权的图,时间复杂度O(
阅读全文
摘要:树链剖分是将一棵树分成几条链,把树形变为线性以减少处理难度。 对于轻重链剖分,每个非叶子节点的儿子中儿子数量最多的那个儿子为重儿子,其余所有儿子为轻儿子。 重边指连接两个重儿子的边,其余的边为轻边。 重链指相邻重边连起来的一条重儿子的链。 每一条重链以轻儿子为起点。 dfs序中子树的dfs序是连续的
阅读全文
摘要:线段树扫描线,矩形面积并,面积的求法模拟扫描线从下向上扫过图形,并快速计算当前扫描线被截得的长度。将横边赋上不同的权值,下边为1,上边为-1。所有横边按照y坐标生序排序,每次先碰到下边,再碰到上边。 矩形周长并,纵边总长度=sum(2被截的线段条数扫过的高度),横边总长度=sum(|上次截得的总长-
阅读全文
摘要:动态开点线段树,只有需要用到一个点才新建该点,否则不进行构建,可以节省空间复杂度。 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(
阅读全文
摘要:对于多次询问,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
阅读全文
摘要:tarjan求无向图割点,若x是根节点,则子树个数>1时x时割点;若x是非根节点,当ipt[x]<=low[y]时x是割点,说明y的子树无法通过非父子边回溯到x的祖先,那么删掉x,图将分裂成两个字图,即x是割点。 void tarjan(int x,int root){ ipt[x]=low[x]=
阅读全文
摘要:链式栈 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
阅读全文
摘要:并查集本质上是维护一个森林,初始时森林里每个点是一个集合,之后将集合合并,查找一个点所在集合的代表元素,将两个集合的代表元素进行合并。使用时不要忘记初始化! 在一般情况下,可以使用路径压缩与按秩合并或启发式合并。 struct DSU{ int f[N<<1],sz[N<<1],rk[N]; inl
阅读全文

浙公网安备 33010602011771号