博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
纪中14日听课小结 图论 最短路 二分图 差分约束
阅读量:5274 次
发布时间:2019-06-14

本文共 1086 字,大约阅读时间需要 3 分钟。

纪中14日听课小结

0x00 绪言

还不错吧……

起码这个还能听懂一些……

0x01 二分图

定义:将所有点分为两个集合,且同一个集合内的点没有直接的边

可以有环。但是可以证明只有偶环,没有奇环。

奇环:由奇数个点构成的环

匈牙利算法

基于贪心,框架DFS递归

可求二分图是否为完美匹配,或者二分图的最大匹配。

 

例题

BZOJ4443 小凸玩矩阵

有一个n*m的矩阵,要取出n个数,且每行每列至多取一个。

问取出的第k大数最大是多少。

Algorithm

将每一行/列看做是一个点

分别放置两个集合中

求原图的最大匹配

最后二分mid查找kmin

(我也不知道我说的对不对……还是听听大佬的吧!)

 

 2019-08-14 18:01 

小凸玩矩阵 是先二分答案 再将需要用的点跑二分图判断该答案是否成立

0x02 SPFA*

* SPFA是Shortest Path Fast Algorithm的缩写

作用:计算单源最短路径长度

架构:BFS广搜变形+队列优化

时间复杂度:O(VE)~O(E)

玄学优化:SLF:若队尾的SSSP<队首的SSSP,则将队首队尾元素交换

0x03 Johnson

几乎没什么人用

在Dijkstra(迪杰斯特拉)的基础上构建

多了每一个点的权重h

在图外新建一个点

且这个点到所有点的的距离皆为0

dist[u,v]=dist[u,v]+h(u)-h(v)

可以处理负权边

0x04 Prim

用来计算最小生成树(MST,Minimum Spanning Tree)

基于贪心

用邻接表存储边(结构体更好)

  1. 从任意一点开始
  2. 扫描MST所有出边,选用离当前MST距离(边权)最小的点加入MST(即优先用边权小的边)
  3. 标记此点(用bool数组)

暴力O(|v|2

堆优化后O(|v|*log(|v|))

0x05 kruskal

克鲁斯卡尔

基于贪心

同Prim,用来计算最小生成树(MST,Minimum Spanning Tree)

用并查集来查看是否形成环

  1. 使用邻接表储存两点之间的边权
  2. 将所有边按照边权进行排序(从小到大)
  3. 每次选取最小边权的两点,查询这两点是否在同一集合内
  4. 若不在,则将这两点连接,并使用并查集merge(合并)这两点
  5. 重复3,4直到连了n-1条边(或只有一个点的祖先是自己),即所有点都在同一个连通分量中

平均时间复杂度为O(|E|log|E|),其中E和V分别是图的边集和点集。(百度百科)

转载于:https://www.cnblogs.com/send-off-a-friend/p/11352629.html

你可能感兴趣的文章
视图的定义、更新、撤销
查看>>
iOS之页面传值-----单例传值、通知传值
查看>>
数组换位子
查看>>
软件测试草图
查看>>
一个App项目设计开发完整流程
查看>>
如何使用iClap创建普通批注
查看>>
用Java编写自己的机器人,为你承担苦力
查看>>
第四章App4_3,懂得了抛出异常 throws Exception,read为读取键盘输入数,学会了switch循环...
查看>>
从零开始——MySql01
查看>>
基于线程池的线程管理(BlockingQueue生产者消费者方式)实例
查看>>
sqlmap
查看>>
给出随机存储器(RAM)和只读存储器(ROM)的差别
查看>>
CSS3 3D Transform
查看>>
js深拷贝
查看>>
http和socket之长连接和短连接区别(转)
查看>>
【HTML】网页中如何让DIV在网页滚动到特定位置时出现
查看>>
文件序列化
查看>>
C++11 中的线程、锁和条件变量
查看>>
HDU 2485 Destroying the bus stations(!最大流∩!费用流∩搜索)
查看>>
Oracle关于用户信息的一些SQL语句
查看>>