![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法总结
光球层上的黑子
是个菜狗
展开
-
HDU4253 k条黑边的最小生成树
题目链接https://acm.hdu.edu.cn/showproblem.php?pid=4253题意给出图,边分黑白两色,求使用k条黑边的最小生成树思路先贴论文http://www.doc88.com/p-916950232776.html二分+生成树。为每条黑边加权x,然后求出使用最少low条黑边和最多high条黑边的最小生成树。可以证明low到high是一个连续区间,这个low和high可以通过更改排序策略求出(同边权时优先黑/白边)。假如k落在这个区间中,那么使用k条黑边的生成树和原创 2021-07-28 20:12:48 · 362 阅读 · 0 评论 -
可并堆/左偏树算法总结
可并堆又名左偏树顾名思义,可并堆是一个可以高效合并的堆结构。它可以在O(logn)的复杂度下实现删除,查找最小值,合并的操作。但注意可并堆的复杂度很假…因为其树高可以被卡到O(n)很多时候会被卡性质dist我们定义左右儿子任一为空的节点为外节点,空节点也是一个外节点。定义某节点dist的值为其子树中外节点到它最近的距离,定义空节点的dist值为-1,显然我们能知道外节点的dist值为0左偏树是这样的一棵树:满足堆的性质,同时任一节点,其左节点的dist大于其右节点的dist,那么我们显然原创 2021-04-13 22:26:47 · 161 阅读 · 0 评论 -
上取整除法小技巧
n/m上取整==(n-1)/m +1证明在此不表原创 2021-03-05 17:58:24 · 248 阅读 · 0 评论 -
应对unordered_map被卡的方法
昨天做题的时候用unordered_map一直TLE,改用离散化过了。今天去cf题解下面翻评论区发现map能过。了解之后知道unordered_map可以被卡哈希卡到O(n²)。解决办法的话有一个自定义hash函数,这里放上大佬连接添加链接描述具体用法是添加头文件#include<chrono>加入如下代码块struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97原创 2021-03-05 17:39:08 · 1520 阅读 · 3 评论 -
图的连通性相关总结:强连通,双连通,割点割边,2-sat
刚学完了连通性相关的知识,总结一下以下均使用tarjan算法强联通分量定义强连通分量即强联通子图,一般我们都在有向图中求取最大强连通分量,即一张图中任两点可达的最大子图。其中单独一个点也是强联通子图。算法在这里我们使用tarjan算法,维护两个栈,系统堆栈(递归隐式使用),连通子图堆栈。维护两个数组,dfn时间戳数组和low最小可达(自己取的名字)数组。算法过程如下:对每一个联通块调用tarjan函数,他的运行和dfs类似,会给访问到的节点打上时间戳,并把所有经过节点加入栈中。同时维护low原创 2020-12-29 11:58:00 · 541 阅读 · 0 评论 -
最小环问题总结(有向,无向,经过某一点)
最小环顾名思义,最小环即为带权图中最短的环路算法主要是floyd和dij两种Floydfloyd三层循环中,最外层k循环代表用上第k个点的最短路,在刚开始时,所有节点最短路中都是仅包含前k-1个节点的,我们在floyd跑带有k节点的循环前进行操作,枚举i,j。i-j-k-i为一个可能的环路。其中i-j我们用跑出的dis数组来表示,因为floyd性质确保了i-j的最短路中没有k节点存在,之后j-k和k-i我们用他们之间本来的边来表示,更新答案。代码#include<cstdio>原创 2020-11-08 16:37:47 · 2117 阅读 · 7 评论