
算法总结
渴望成为大佬菜鸡
这个作者很懒,什么都没留下…
展开
-
次短路及次短路计数
AcWing 383. 观光. #include <bits/stdc++.h> using namespace std; const int N=1010,M=20010,INF=0x3f3f3f3f; struct node{ int to,nex,w; }edge[M]; struct ver{ int id,type,dist; bool operator> (const ver &w) const { return dist > w.dist; }原创 2021-05-05 10:50:53 · 279 阅读 · 0 评论 -
dinic模板
#include <bits/stdc++.h> using namespace std; const int N=10010,M=200010,INF=0x3f3f3f3f; int n,m,S,T; int head[N],cnt; int d[N]; struct node{ int to,nex,c; }edge[M]; void addedge(int u,int v,int c) { edge[cnt].to=v,edge[cnt].c=c,edge[cnt].nex=head[原创 2021-04-25 17:31:35 · 162 阅读 · 0 评论 -
字符串最小表示法(找循环节)
最小表示法: 通过多次将第一位放到最后一位形成新的字符串,找出这些串中字典序最小的,即为该字符串的最小表示法。 例如:bcabd->cabdb->abdbc->bdbca->dbcab->bcabd(原串) 该字符串的最小表示法为abdbc。 做法: 在原串后加入一个原串,形成一个长度为2n的新串,通过双指针暴力比较两个串的关系,如果s[i+k]>s[j+k]时,i之所以可以跳到i+k+1,是因为当i’在i—i+k之间时,相对应j’—j+k-1与i’—i+k-1相同,原创 2021-04-24 22:24:23 · 1133 阅读 · 0 评论 -
LCA(最近公共祖先)
LCA(最近公共祖先) 1.倍增法(在线算法) 2.Tarjan(离线算法) 一、倍增法 1、 算法过程: 1.预处理出 fa[i,j] ,和 depth[i] 。( fa[i,j] 表示从i这个点向上跳2j到达的点,depth[i] 表示这个点在这课有根树中的深度,同时要将 depth[0] 设置为0,方便代码的书写)。 2.先将两个点跳到同一个深度。 3.让两个点同时向上跳,直到两个点跳到其最近公共最先的下一层。(如果跳到同一层的话,不能确定是否是最近的)。 4.输出fa[当前点][0]即为最近公共祖原创 2021-04-16 10:20:12 · 549 阅读 · 0 评论 -
acm算法总结——搜索
一.搜索算法的概念及其种类: 1.概念: 利用计算机的高效性,穷举出问题的部分或者所有的解,是求解问题的一种方法。本质上是通过初始条件扩展出问题的“解答树”,去寻找问题的解。构建这样的树形模型主要由两个部分——控制结构(扩展节点的方式)和产生系统(扩展节点)。通过对每个节点不同方式的拓展去寻找目标解。 2.种类: 深度优先搜索(DFS) 广度优先搜索(BFS) 二分搜索 散列法(Hash) ...原创 2019-05-20 20:38:47 · 659 阅读 · 1 评论