摘要: Priority_queue用法模板 一、无需重载运算符 小根堆 #include<bits/stdc++.h> using namespace std; priority_queue<int,vector<int>,greater<int> >q; int main() { for(int i=1 阅读全文
posted @ 2020-10-23 21:01 林生。 阅读(132) 评论(0) 推荐(0)
摘要: 八月月赛 P6745 Number #include<bits/stdc++.h> using namespace std; #define ll long long ll k,x,a[555]; int main() { scanf("%lld %lld",&k,&x); a[k+1]+=1; w 阅读全文
posted @ 2020-10-23 20:59 林生。 阅读(56) 评论(0) 推荐(0)
摘要: 显著特征 按顺序填入$1$到$i$的数组$a$,给定一个对应顺序$s$,新的数组$b$满足$b[i]=a[s[i]]$。(然后将新的b数组当成a数组,进行下一次相同的操作) 实质为:给定一个数n,将n拆分为$n=x1+x2+x3+···xp$,求有关$lcm(x1,x2,x3,···,xp)$的问题 阅读全文
posted @ 2020-10-23 20:56 林生。 阅读(421) 评论(0) 推荐(0)
摘要: 启发式合并 即:玄学合并 P3012 梦幻布丁 #include<bits/stdc++.h> using namespace std; const int N=1e5+5,M=1e6+5; int n,m,ans,a[N],st[M],f[M],pre[M],tail[M],siz[M]; voi 阅读全文
posted @ 2020-10-23 20:48 林生。 阅读(88) 评论(0) 推荐(0)
摘要: CDQ分治 思想 分治,二分进行计算。将区间左半部分作为已知,右半部分作为查询进行计算。 陌上花开(三维偏序) 关键思想:按abc关键字进行排序,再以b为关键字进行归并排序。 因为先按a排序:每次归并时都一定有右区间的a大于等于左区间的a。 因为先按abc进行排序,故不会出现{1,1,3}{1,1, 阅读全文
posted @ 2020-10-23 20:44 林生。 阅读(102) 评论(0) 推荐(0)
摘要: #include<bits/stdc++.h> using namespace std; string s; int i,j,k; int main() { cin>>s; int len=s.length(); s+=s; i=0;j=1; while(i<len&&j<len) { for(k= 阅读全文
posted @ 2020-10-23 20:42 林生。 阅读(40) 评论(0) 推荐(0)
摘要: KMP 两个单整串相互匹配。 #include<bits/stdc++.h> using namespace std; const int N=1e3+5; string s1,s2; int nxt[N],ans,len1,len2; int main() { cin>>s1>>s2; len1= 阅读全文
posted @ 2020-10-23 20:41 林生。 阅读(112) 评论(0) 推荐(0)
摘要: RMQ问题 单调队列 单调队列 #include<bits/stdc++.h> using namespace std; const int N=1e6+5; int n,m,a[N],q[N]; int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n 阅读全文
posted @ 2020-10-23 20:39 林生。 阅读(119) 评论(0) 推荐(0)
摘要: Tarjan 模板 void tarjan(int u,int fa) { //最初能到达的dfn最小的点为其本身 dfn[u]=low[u]=++tdfn; for(int i=tail[u];i;i=e[i].pre) { int v=e[i].v; //如果这个点还没到达,就走一走 if(!d 阅读全文
posted @ 2020-10-23 20:35 林生。 阅读(161) 评论(0) 推荐(0)
摘要: 一些小tip 快读 读入速度快于scanf,远快于cin。 模板。 ch=getchar()写在while的条件里时耗时会增加。 int read(){ int x=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch= 阅读全文
posted @ 2020-10-23 20:34 林生。 阅读(75) 评论(0) 推荐(0)
摘要: 二分图 没有网络流不能做的二分图!(不是) 二分图最大匹配模板 最小点权覆盖也是如此。 #include<bits/stdc++.h> using namespace std; const int N=505; int n,m,e,ans,bp[N],cnt[N]; bool d[N][N],vis 阅读全文
posted @ 2020-10-23 20:33 林生。 阅读(81) 评论(0) 推荐(0)
摘要: 网络流 一、基本概念 1、流 A、网络流问题 给定指定的一个有向图,其中有两个特殊的点:源S,汇T。 每条边有指定的容量,求满足条件的从S到T的最大流。 通俗解释:汇T为你家,源S为自来水厂,边即自来水厂和你家之间修的水管子,容量即水管子容量,有的大有的小。自来水厂开闸放水,问你家收到的水最大流量是 阅读全文
posted @ 2020-10-23 20:31 林生。 阅读(435) 评论(0) 推荐(0)
摘要: Tarjan算法与无向图连通性 缩点 int tdfn,c[N],dfn[N],low[N],tak[N]; bool ins[N]; void tarjan(int u) { dfn[u]=low[u]=++tdfn; tak[++tak[0]]=u; ins[u]=1;//在栈里 for(int 阅读全文
posted @ 2020-10-23 20:11 林生。 阅读(132) 评论(0) 推荐(0)
摘要: 差分约束问题 区间 给定 n 个区间$ [ai,bi]$和 $n \(个整数\) ci$。 你需要构造一个整数集合 Z,使得∀i∈[1,n],Z 中满足ai≤x≤bi的整数 x 不少于 ci 个。 求这样的整数集合 Z 最少包含多少个数。 输入格式 第一行包含整数 n。 接下来n行,每行包含三个整数 阅读全文
posted @ 2020-10-23 20:10 林生。 阅读(113) 评论(0) 推荐(0)
摘要: 负环 SPFA:检查cnt[u]是否大于n-1 DFS/BFS:可更新的点是否已经到过 阅读全文
posted @ 2020-10-23 20:08 林生。 阅读(80) 评论(0) 推荐(0)
摘要: 次小生成树 给定一张N个点M条边的图,在其生成的所有树中权值大小仅次于最小生成树的树被称为次小生成树。 结合模板题进行讲解。 次小生成树 给定一张 N 个点 M 条边的无向图,求无向图的严格次小生成树。 设最小生成树的边权之和为sum,严格次小生成树就是指边权之和大于sum的生成树中最小的一个。 输 阅读全文
posted @ 2020-10-23 20:06 林生。 阅读(89) 评论(0) 推荐(0)
摘要: 树上差分 引理:差分序列的前缀和是原序列。 原数列 9 4 7 5 9 前缀和 9 13 20 25 34 差分数组 9 -5 3 -2 4 前缀和的差分数组 9 4 7 5 9 差分数组的前缀和 9 4 7 5 9 树上差分即将区间操作转化为路径操作。 点差分 边差分 闇の連鎖 传说中的暗之连锁被 阅读全文
posted @ 2020-10-23 20:04 林生。 阅读(96) 评论(0) 推荐(0)
摘要: 最近公共祖先_LCA 给定一棵有根树,若节点z即可以到x也可以到y,则称z为xy的公共祖先,公共祖先中深度最大(即距离x,y最近)的则是xy最近公共祖先,称为LCA(x,y)。 以洛谷的**P3379【模板】最近公共祖先(LCA)**进行讲解: 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直 阅读全文
posted @ 2020-10-23 20:01 林生。 阅读(156) 评论(0) 推荐(0)
摘要: 树的直径 树中最远的两个节点之间的距离或者路径被称为树的直径。 树的直径一般有两种写法,时间复杂度都为O(n)。 树形DP 以1号节点为根,d[x]表示从x节点出发可达的最远距离,f[x]表示过x节点的最长路径长度。 对于每个x,扫描到x的第i个子树,d[x]储存了从x到1~i-1的子树的点的最远距 阅读全文
posted @ 2020-10-23 20:00 林生。 阅读(205) 评论(0) 推荐(0)
摘要: 最小生成树 Kruskal算法O(mlogm) 按边扫描,选边加入树,使每个子树都最小,一边加边一边合并,最后得到整棵树。 1.建立并查集,每个点个字构成一个集合。 2.将所有边按照w大小排序,依次扫描每条边(u,v,w)。 3.如果u,v属于同一集合(即相连,存在长度更小的使u和v相连的边),则跳 阅读全文
posted @ 2020-10-23 19:49 林生。 阅读(141) 评论(0) 推荐(0)