• 纪中14日听课小结 图论 最短路 二分图 差分约束


    纪中14日听课小结

    0x00 绪言

    还不错吧……

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

    0x01 二分图

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

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

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

    匈牙利算法

    基于贪心,框架DFS递归

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

    例题

    BZOJ4443 小凸玩矩阵

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

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

    Algorithm

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

    分别放置两个集合中

    求原图的最大匹配

    最后二分mid查找kmin

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

    #1楼 2019-08-14 18:01 Pedesis

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

    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分别是图的边集和点集。(百度百科)

  • 相关阅读:
    三层数据访问层的参数处理
    图片加水印
    网站程序安全策略
    如何在.NET下使用MetaWeBlog API迁移博客
    如何使用NAnt 自动打包DNN模块 之二
    无法转出.cn域名到Godaay.com
    如何避免ASP.NET网页初次加载缓慢
    Teradata Automation Developer 职位
    How to let FIR open a URL when you click an image
    如何使用.NET清除IE的缓存(Temporary Internet Files)
  • 原文地址:https://www.cnblogs.com/send-off-a-friend/p/11352629.html
Copyright © 2020-2023  润新知