- 博客(9)
- 收藏
- 关注
原创 图论有关算法②
这是一类「有限制」的最短路问题。理解一下题意:有k个中转站,加终点站就是k + 1个点。到第k个中转站的时候再到终点模拟大致这个过程然后求的最优解。因为有可能一次就松弛完毕了。例如 a -> b 1 b -> c 2 a - > c 10;在第一轮更新假设先更新了a - > b 然后b -> c也会顺带更新了。不符合我们要乘坐2次的要求。所以我们再用一个表记录更新后的,老的表一次只变一个?当所有边遍历完都不能再松弛的适合就是最佳答案了。因为松弛就是找最优解的时候。
2024-10-02 15:00:33
305
原创 算法之bfs的应用
依次dis[c] = 1 ,dis[d] = 2,看b->d dis[d] > dis[b] + w 更新dis[d] = dis[b]+ w ,dis[d] = 1。第二种形式,数组模拟队列跑了一下,我们可以想到层数,因为bfs是一层一层遍历的吗,假设a是起始点,a可以遍历到b,c,d,我们用一个level记录,第二次进入队列的数就是此时的层数,能遍历到b,c , d = 1。所以dis表的值会顺带更新当有队头队尾都存在的时候对头弹出的就是此时最后的值在队伍的值也已经被修改了因为是共用了dis表。
2024-09-22 11:26:34
1007
原创 算法之最小生成树
前序:来自b站左神程,个人整理笔记,如有错误,感谢指出!最小生成树:n个结点组成的图 ;n - 1条边构成的不成环且权值和最小。两种方法:Kruskal算法和Prim算法K算法:(使用到了并查集)当再次遇到的集合中的数代表会成环不加入。题目模板#include<bits/stdc++.h>using namespace std;const int N = 1e5;const int M = 200010;int father[N];int
2024-09-19 20:45:46
347
原创 算法之图论
还是一样的原理,当1号结点与2号结点连接的时候,此时head更新,head[1] = 4,next[4] = 1,上面可知head[1] = 1,替换了,所以next数组就是记录每次替换的边,相同的结点,to[4] = 2。第四条边是1和2.又更新1 -> 4 ,所以head[1] = 5记录,最新的当前边,next[5] = 4,指向上条被更新的四号边。首先删除a ,与a有关的点入度减1 ,那么b此时的入度为0,再删除b,与b有关的点入度再减1,看有没有入度为0,继续删。有向边,无向边,边带权值。
2024-09-19 12:47:57
2147
原创 算法之并查集
思路:同行同列的石头都可以连成一块,即可以合并x坐标相同,也可以合并y坐标相同的石子。,它把每个连通分量看成一个集合,不在意内部究竟是如何连接的,结点之间只有“属于”和“不属于”同一连通分量的区别,所以无需在意点与点之间是单向连接还是双向连接。思路:很经典的并查集,看能形成多少个集合,依次对每个字符两两枚举的字母差异数量,由题意可知,只有两个字母不同或者两个字符相等才能相似。思路:合并后形成的k对数组,说明要交换k - 1次,并且每一对正确的情侣,他们除2对应的是他们所在的组号。题目四:(二维并查集积累。
2024-09-16 15:45:03
278
原创 算法之单调栈总结
分析 假设有组数组3 4 5 2,单调栈进行维护当被破坏的时候依次进行枚举,因为5是栈顶元素,所以此时只有一种情况有最小值那就是5本身,继续判断循环再次进入4我们知道因为是单调的此时i到cur就知道结尾的情况,开头只有本身开头,1 * 2 * 4 = 8.emm大概就这意思。运用:// 单调栈求每个位置左右两侧,离当前位置最近、且值严格小于的位置(大于)题目二:思路:前面提到的下一个,而且只要考虑右边,等于的时候直接也入栈不影响。
2024-09-13 20:34:37
413
原创 算法之单调队列
个人开始认为的疑难点:按照前面分析说的,保持队头为每个窗口的最大值,当窗口更新的时候怎么知道是下一个窗口的最大值,后面发现l,r指针控制,而队列仅仅维护每次的最大值即可。最大值,优先队列结构也可以处理。思路:既然是任意两个都不大于某个数x,那么窗口内最大和最小的两个数的绝对差也小于x,一旦下一个数进入窗口,就有可能有三种情况最大的数变了,破坏原平衡,最小的数变了,破坏原平衡,或者不破坏,依旧成立。
2024-09-13 20:33:53
383
原创 算法之滑动窗口
左神举得例子如下,假设可操作字符的长度为10,窗口之外q为20,w18,e16,r16,这样窗口内10个字符只要全变成wer即可,假设q为22,可操作字符的长度此刻为22,那么wer有一个就不能达到m的数量。思路分析:遇到重复字符时如何处理遇到重复字符的边界,找到重复字符上一次出现的位置与L位置进行相比较,也有点动态规划的感觉emm。字符与数字的映射,常用的小技巧。比较巧妙的设成负数,维持0状态就是最好,字符数量大于0在有效长度内就可以缩减,感觉太难想代码比较容易理解,积累经验了害。
2024-09-07 16:22:02
549
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅