该文被密码保护。 阅读全文
摘要:
给定一个长度为n的数列,请小明求出其中m段给定区间中的最大值。 显然当n,m很小的时候这是个暴力枚举的入门题,而n,m很大的时候只会暴力枚举的小明只能哭唧唧。 这时ST表登场了,它可以实现O(nlogn)预处理,O(1)查询,学会了它小明马上笑嘻嘻。 怎样做到O(1)查询呢?我们可以很容易想到令ma 阅读全文
摘要:
倍增LCA LCA:已知一个树和书上两个点,求两个点的最近公共祖先。 倍增:将2的所有次幂排成一个序列,相加可以得到所有正整数,这样就可以在找最近公共祖先时不是一层一层找而是每次找2的幂次方层,大大提高算法效率。 算法思路: 1,用链式前向星存图,找到根节点并从根节点开始进行深度优先搜索,存储每个节 阅读全文
摘要:
(话说这么些算法的名字嗯。。。 Kruskal算法:(下文它就暂时叫k算法吧 k算法是一种应用贪心思想及并查集,在图中查找最小生成树的算法。 (最小生成树:若一个无向图内任意两个顶点联通切图为一棵树,此图即为生成树。在带权值无向图中权值和最小的生成树即为最小生成树。 时间复杂度:O(mlogm)// 阅读全文
摘要:
Tarjan算法: Tarjan算法是一种用于查找已知图中的强连通分量的方法(介绍似乎越来越草率了 时间复杂度:O(n+m)//n为点数,m为边数 算法思路: 1,首先对每个节点设置两个参数存储:dfn[i]表示第i个点被搜索到的次序编号(每个点的dfn值都不同,low[i]表示每个点在这棵树中的最 阅读全文
摘要:
SPFA算法: SPFA算法是图论中主要应用于解决带负权图相关问题的一种算法,它死了。 时间复杂度:O(ke)//k为平均每个节点入队次数 算法思路: 1,建立先进先出队列存放待优化结点; 2,每次去除当前队首结点u,用u最短路径估计值将与u相连的结点v进行松弛操作,若v最短路径被更新且v不在队列中 阅读全文
摘要:
(蒟蒻出品,欢迎指正) Dijkstra算法(由于字母太多,以下统一用dij代替(逃 dij算法,使用广度优先搜索与贪心算法解决单源图的最短路径问题,不适用于有负权边的图。 时间复杂度:O(mlogn)//n为顶点数,m为边数。 算法思路:对于所需求解的图,首先假设任意两顶点之间距离为正无穷。然后开 阅读全文
摘要:
传送门: https://www.luogu.com.cn/problem/P6175 floyd以外无脑暴搜取得伟大胜利(得益于数据小 注释小能手又双上线了(天下苦题解不说数组是干什么用的久矣 1 #include<bits/stdc++.h> 2 #define ff(i,s,e) for(in 阅读全文
摘要:
传送门: https://www.luogu.com.cn/problem/P1439 最长公共子序列可以考虑转化为最大上升子序列。很容易想到用结构体存储元素i(1<=i<=n)分别在两个序列中出现的位置,按其在第一个序列中出现的位置排序,对样例便有: x[i].a:1 2 3 4 5x[i].b: 阅读全文