连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)
作者:SovietPower✨
链接:https://ac.nowcoder.com/discuss/186584
来源:牛客网
度数序列
对于无向图,
Havel–Hakimi算法
给定一个由有限多个非负整数组成的度数序列,是否存在一个简单图使得其度数序列恰为这个序列。
令
序列
(这个其实就是很显然的东西。。主要是一个定义)
Erdős–Gallai定理
令
也不难理解。对前
因为
例题:Good Bye 2018 E,NEERC2013 K.Kids in a Friendly Class。
欧拉路与欧拉回路
给定一张无向/有向图,求一条经过所有边恰好一次的回路。有解当且仅当所有点 度数为偶数(无向)/入度等于出度(有向)。任选一点开始dfs,每条边只经过一次。回溯时将回溯的边加入队列,最后队列的逆序就是答案。时间复杂度
欧拉路径也可以用一样的方法求出(找度数为奇数的点进行DFS)。
欧拉回路:
- 有向图:所有点的出度入度都相等;从任意一点都可实现。
- 无向图:所有点度数都为偶数。
欧拉路:
- 有向图:有两个点可以入度出度不相等(差不大于一),即起点终点;起点入度小于出度,终点入度大于出度 。
- 无向图:仅有两个点度数为奇数。
注:必须为连通图(用并查集判断)。
两笔画问题:
有解当且仅当入度为奇数的点不超过四个。将其中两个点加一条边后求欧拉路径,然后在这条边处断开成两条欧拉路即可。时间复杂度
题目:UOJ#117(模板)、题集。
Prufer序列
这里很全,可以看这儿。
Defination:
Prufer序列是一种无根树的编码表示。
对于一棵
无根树转
定义无根树中度数为
上图对应无根树的
给定点集
每次取出
生成树计数
Cayley定理:完全图的生成树个数为
题目:题集。
Matrix-Tree定理
无向图生成树计数:令
有向图生成树计数:与无向图不同的是,
题目:题集。
最小生成树 Borůvka算法
一开始每个连通分量是一个点本身。
每轮枚举所有属于不同连通分量的边,每个连通分量选择和其他连通分量相连的最小的边,然后合并。
每轮连通块个数至少减半,所以最多进行
具体实现直接用并查集即可。代码可以看这里。
题目
一般用来做边权与点权相关,还是个完全图,求MST的题?
1. 有
2.CF888G。有一张
最小瓶颈生成树
使得生成树树上最大边权值最小。
方法1:最小生成树一定是最小瓶颈生成树。
方法2:二分答案,看点是否连通。
方法3:类比找第k大值的方法(`nth_element`),首先随机一个边权$w$。然后将不超过这个边权的边加入,遍历这张图。
如果图连通,那么瓶颈不超过$w$,于是只需考虑边权不超过$w$的边;否则将这些连通点缩起来,考虑边权大于$w$的边。
每次将问题的规模缩小至一半。期望时间复杂度$T(m)=T(frac m2)+O(m)=O(m)$。
单源最短路(SSSP)
时间复杂度
一些变种
边权是
最长路径不超过
关于判负环
复杂度
if (dis[v] > dis[u] + w)
{dis[v] = dis[u] + w;dep[v] = dep[u] + 1;if (dep[v] > n) return;
}
差分约束
大体过程:(具体可以看这里)
考虑最短路中的松弛操作:
所以对于
如果限制是
如果两种限制都有,就把
解的存在性:
比如求
否则有解。
PS:
如何判断解唯一:
对原图求一遍最短路。将原图取反,边权取反,求一遍最长路。
一个标号对应的是能取到的最小值,一个是最大值。
如果相同则解唯一。(没什么用)
题目:题集。
多源最短路(APSP)
原理:首先给图中每个点一个权值
对于$
所以这么做不会改变最短路。(具体也可以看这里)
实现:第一次SPFA预处理$1$到每个点的距离
其中$
由不等式可以得到
之后可以每个点用
这样也可以实现
半径 直径 (正权图)
(后面可能就直接抄dls课件了QAQ)
直径
半径
中心
绝对中心(可以定义在边上)
绝对中心
相关:求最小直径生成树(差不多)。
实现:固定一条
假设第三个点是
那么对应的折线为
那么偏心距为
按左端点排序维护一下。时间复杂度
最小直径生成树
即绝对中心的最短路树。
如何证明?
注意一棵树
拓扑排序
每次去掉图中入度为$0$的点。
时间复杂度
如果最后不为空集,那么这个图不为DAG。(否则每个点入度不为0,即每个点可以选择一个前趋,沿着前趋走根据抽屉原理一定能找到相同点,也就是一个环。)
按照反图DFS,出栈序列就是一个合法的拓扑序列。
scc缩点顺序也是一个合法拓扑序。
求字典序最小的拓扑序
每个点有不同的标号,要使得拓扑序最小。
将拓扑排序的队列改成优先队列即可。
最小拓扑序的一个变种
使得最后的拓扑序中1的位置尽量靠前,如果相同比较2的位置,依次类推。
首先考虑如何求1最早出现的位置,可以将原图反向,然后每次弹除了1之外的元素,直到队列只剩下1为止。
这是反图中1的最晚的出现的位置,也就是原图中最早的。
根据是否在队列里,这个图被分成两部分,在对应的图中用同样的方法处理2,依次类推。
容易发现每次找尽量大的元素出队,能完成上述的过程。
所以等价于反图最大字典序。
题目:题集。
二分图匹配
Hall's marriage theorem(霍尔定理)
对于一个二分图
一个图有完备匹配当且仅当
对一般图的推广:
推论:每个正则二分图都有完备匹配。
Kőnig's theorem
最小点覆盖=最大匹配 (与最大流最小割定理等价)
最大独立集=点数-最大匹配 (独立集为点覆盖的补集)
最小边覆盖=最大独立集 (独立集中每个点需要一条边去覆盖)
DAG最小路径覆盖
覆盖所有的边:每条边下界设为1, 然后求最小流。
覆盖所有的点:建立二分图,对于
题目:题集。
连通分量
强连通分量
将一个图的所有强联通分量缩起来会得到一个DAG。
双联通分量
点连通度: 最小的点集使得删去之后图不连通
边连通度: 最小的边集使得删去之后图不连通
如果一个图的点连通度大于1,那么是点双连通的,边连通同理。
双联通分量为图中的极大双联通子图。
割点和桥
考虑DFS树,每条非树边对应着一个点到祖先的路径。对于一条非树边只要把对应的边打上标记即可。
比如对于$(u,v)$这条非树边,只要在$u$点打上$+1$的标记,$v$点打上$-1$的标记。
$x$到$fa[x]$的树边的覆盖次数为子树内所有标记的和。
割点同理(注意特判根节点和叶节点)。
(emm没看懂下面要干嘛)
题目:题集。
2-SAT
一堆变量的二元限制,问是否存在合法的赋值。
题目:例题,题集。
曼哈顿距离与切比雪夫距离
将原坐标系每个点的坐标
反过来,将原坐标系每个点的坐标
例题:BZOJ3170 松鼠聚会。
与作者交流:https://ac.nowcoder.com/discuss/186584
更多算法和题解:https://ac.nowcoder.com/acm/contest/discuss
连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)相关推荐
- 连通域最小外接矩形算法原理_基于分割的文本检测算法之PSENet/PAN/DBNet
1. 文本检测难点 文本内包含文本,艺术字体,任意方向 ,曲线文字 ,多语言,其他环境因素等是文本检测中的难点 2. 分割 问题1: 语义分割模型是对pixel进行分类,所以理论上讲,可以检测不规则的 ...
- 雪花算法原理_算法越来越强,我们的判断力却越来越弱
我们每天在网络平台上看到的信息,很大程度上是由运营平台的商业公司所编写的算法决定的.但在工具理性的背后,确实存在着网络用户对新闻平台的不满与抱怨:点开全文毫无意义的标题党.缺少"石锤&quo ...
- 旋转卡壳算法求最小外接矩形代码
旋转卡壳原理:旋转卡壳详解_大学要有梦想的博客-CSDN博客_旋转卡壳 思路: 1.选择卡壳算法用于求凸多边形的最小外接矩形 1.多边形最小的外接矩形一定是以多边形的的一条边为底的一部分 2.通过这条 ...
- 最小外接矩形思路以及实现
最小外接矩形 外接矩形计算 对一个凸多边形进行外接矩形计算,需要知道当前面的最大xy 和最小xy值,即可获得外接矩形 最小外接矩形计算 对凸多边形的每一条边都绘制一个外接矩形求最小面积.下图展示了计算 ...
- python外包凹多边形生成_Python实现图片查找轮廓、多边形拟合、最小外接矩形代码...
1.概述 经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用.本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试. 原图为: 2.测试代码: import cv2 import ...
- OpenCV中minAreaRect()最小外接矩形 cvBoxPoints()计算矩形顶点 RotatedRect和CvBox2D详解
minAreaRect()函数计算并返回指定点集的最小区域边界斜矩形. RotatedRect minAreaRect(InputArray points) points:输入信息,可以为包含点的容器 ...
- cv2.minAreaRect() 生成最小外接矩形
简介 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数. 1 cv2.m ...
- python 提取最小外接矩形_python给人脸带上口罩(简单版)
导读 因为目前公开的口罩人脸数据比较少,如果想训练一个口罩人脸识别模型,必须依赖大量的人脸数据.为了收集到更多的口罩人脸数据,我们只能利用已有的公开人脸数据上通过程序来模拟人脸带口罩.这篇文章向大家介 ...
- opencv 图像轮廓特征 图像面积,轮廓周长,外接矩形、最小外接矩形、最小外接圆、拟合椭圆
找出图像轮廓 contours, hierarchy = cv.findContours(thresh, 3, 2) 画出图像轮廓 cnt = contours[1] cv.drawContours( ...
最新文章
- day07 -文件的基本操作
- Win8开发中如何加载字符串资源(C#)
- r720支持多少频率的内存吗_关于内存频率,高频和低频的性能差距大吗?明白这3点很重要...
- shell编程中的select用法
- Virtools 3D行为编程系列(一)
- 代谢组学的相关分析数据库,MetaboAnalyst 5.0 使用指南
- 笔记本高分屏字体模糊_笔记本win8系统设置1920*1080高分屏后字体模糊的解决方法...
- 面试官问:跨域请求如何携带cookie?
- CSDN中使用编辑器空格
- 2008安装完了找不到_【专业性】关于铸铝热水锅炉安装使用的思考
- 简书文章阅读量之小漏洞
- [渝粤教育] 西安工业大学 数字电子技术基础 参考 资料
- DRL实战 : 强化学习在广告点击业务中的应用
- Java集合源码解读(一):集合总体框架
- Anaconda报错:Conda SSL Error: OpenSSL appears to be unavailable on this machine. OpenSSL is required t
- 企业WiFi认证,怎么确保企业WiFi安全?
- HDOJ 2492 Ping pong 线段树+离散化
- SitePoint播客#71:不断发展的互联网
- HTTP和HTTPS协议,看一篇就够了
- 再见了,曾经喜欢过的歌手
热门文章
- launch images source启动图删除后上下有黑边
- constellio——基于solr的开源搜索引擎系统源码研究(五)
- 拿到串口的数据如何解析_大数据解析如何租到“物美价廉”的好房?
- 从零开始学前端:对象序列化与反序列化、冒泡排序、数组去重 --- 今天你学习了吗?(JS:Day11)
- nvm use切换node版本,但是切换后没有*号
- python题型大全_python进阶:练习题 汇总
- 详解Python中的位运算符规则、原理与用法
- python调用库函数用ecb模式加密图片_python 实现AES加密解密(ECB模式,配合base64)...
- 安卓是java ios c_如何为Android和iOS使用相同的C ++代码?
- python字符串_四、Python的字符串