关于最小生成树,拓扑排序、强连通分量、割点、2-SAT的一点笔记

前言:近期在复习这些东西,就xjb写一点吧。当然以前也写过,但这次偏重不太一样

MST

最小瓶颈路:u到v最大权值最小的路径。在最小生成树上。是次小生成树的一个子问题qwq

最小极差生成树:枚举最小生成树上的最小权值的大小

topo sort

应用:

  1. 可以去掉基环树上的树
  2. DAG上拓扑序小的点指向拓扑序大的点。混合图变DAG时拓扑排序一下然后把无向边从左往右连就可以了。(无解:原来有向边构成的图不是DAG)

Tarjan

强连通分量 SCC

low[u]定义为u子树中的点通过back edge和cross edge能达到的时间戳最小的点v的时间戳,且满足v能到达u(即v不在其他已经确定的SCC中)

if(!dfn[v]) {
dfs(v);
low[u] = min(low[u], low[v]);
} else if(!belong[v]) low[u] = min(low[u], dfn[v]);

割点

low[u]定义不变,由于是无向图所以u和父亲的连边就是tree edge,即v不可以是父亲

然后要特判根的时候,至少俩孩子才可以

PS:删点变树,不能删割点

2-SAT

以前的

形式:

每个变量有两个取值(x,x'),有一些条件限制了某两个变量不能同时取某个值。即“或”。

构图:

对于限制(a,b),连有向边(a,b'),(b,a')

a -> b 意味着a成立时b必须成立

染色做法:

选择一个没有赋值的变量x,赋值为真,然后dfs染色下去,冲突则无解(x和x'都为真)

应用:

  1. 判断某个变量在该系统中是否可取真:

    从此变量开始dfs即可

  2. 求字典序最小的解:

从小到大,先赋值真染色,冲突的话把这次染色回滚掉,再赋值假染色

就是说进行x时,1...x-1时dfs染色的结果还保留着

复杂度:最坏\(O(nm)\)

优势在于我们拥有决定一个变量取值的能力

SCC做法

原图有对称性

显然一个scc中的点要么都选要么都不选,x和x'在同一个scc中则无解

缩点,反向连边

进行拓扑排序,选第一个未染色的点,染白色,然后将否定点及其新图后代dfs染黑色(注意边是反向的,所以一个点为假那么他的后代一定为假)。重复此过程。

复杂度:\(O(m)\)

局限性很强,只能判断是否有解和构造一组解

字典序最小的解也不可做,因为toposort中不断加入ind=0的新点,标号更小的点可以是后加入的(但这时这个点可能已经因为之前的煞笔操作而被染成黑色了)

关于最小生成树,拓扑排序、强连通分量、割点、2-SAT的一点笔记的更多相关文章

  1. Day3 最短路 最小生成树 拓扑排序

    Day3 最短路 最小生成树 拓扑排序 (一)最短路 一.多源最短路 从任意点出发到任意点的最短路 1. Floyd \(O(n^3)\) for(int k=1;k<=n;k++) for(i ...

  2. 小结:双连通分量 & 强连通分量 & 割点 & 割边

    概要: 各种dfs时间戳..全是tarjan(或加上他的小伙伴)无限膜拜tarjan orzzzzzzzzz 技巧及注意: 强连通分量是有向图,双连通分量是无向图. 强连通分量找环时的决策和双连通的决 ...

  3. 【学习整理】Tarjan:强连通分量+割点+割边

    Tarjan求强连通分量 在一个有向图中,如果某两点间都有互相到达的路径,那么称中两个点强联通,如果任意两点都强联通,那么称这个图为强联通图:一个有向图的极大强联通子图称为强联通分量.   算法可以在 ...

  4. 强连通分量(Korasaju & Tarjan)学习笔记

    好久以前学过的东西...现在已经全忘了 很多图论问题需要用到强连通分量,还是很有必要重新学一遍的 强连通分量(Strongly Connected Component / SCC) 指在一个有向图中, ...

  5. 模板 - 强连通分量/割点/桥 - Tarjan

    int dfn[N], low[N], dfncnt, s[N], tp; int scc[N], sc; // 结点 i 所在 scc 的编号 int sz[N]; // 强连通 i 的大小 voi ...

  6. Kosaraju算法解析: 求解图的强连通分量

    Kosaraju算法解析: 求解图的强连通分量 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 定义 连通分量:在无向图中,即为连 ...

  7. HDU.2647 Reward(拓扑排序 TopSort)

    HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...

  8. 【强连通分量】 Kosaraju和Tarjan算法 (标准模板+详细注释)

    codevs 题意:求最大强连通分量的大小以及所包含的顶点有哪些 Tarjan算法 #include<iostream> #include<queue> #include< ...

  9. HUST——1103Party(拓扑排序+个人见解)

    1103: Party Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 11  Solved: 7 Description N students were ...

随机推荐

  1. AForge调用摄像头拍照时设置分辨率

    简单记录下AForge2.2.5.0版本调用摄像头拍照时设置分辨率的方法. FilterInfo info = _videoDevices[0];//获取第一个摄像头 _cameraDevice = ...

  2. Unity Tiny & ECS 学习笔记

    1.官方文档 https://docs.unity3d.com/Packages/com.unity.tiny@0.13/manual/intro-for-unity-developers.html ...

  3. Aras 发布Web Services

    https://blog.csdn.net/plm888/article/details/10890173

  4. Optimal Marks SPOJ 839

    这题远超其他题非常靠近最小割的实际意义: 割边<=>付出代价<=>决定让两个点的值不相同,边权增加 最小割<=>点的值与s一个阵营的与s相同,与t一个阵营的与t相同 ...

  5. 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验 ...

  6. selenium定位方式-获取标签元素:find_element_by_xxx

    定位方式取舍# 唯一定位方式.多属性定位.层级+角标定位(离目标元素越近,相对定位越好) # 推荐用css selector(很少用递进层次的定位)# 什么时候用xpath呢? 当你定位元素时,必须要 ...

  7. Authentication讲解(Spring security认证)

    标准认证过程: 1.用户使用username和password登录 2.系统验证这个password对于该username是正确的 3.假设第二步验证成功,获取该用户的上下文信息(如他的角色列表) 4 ...

  8. 将Chrome插件Momentum背景图片设为桌面壁纸

    Momentum简介 Momentum插件是一款自动更换壁纸,自带时钟,任务日历和工作清单的chrome浏览器插件.官方的解释就是:替换你 Chrome 浏览器默认的“标签页”.里面的图片全部来自50 ...

  9. sql 常见错误总结

    1.根据一张表更新另一张表的数据. . 写法轻松,更新效率高: update table1 set field1=table2.field1, field2=table2.field2 from ta ...

  10. 【easy】141. Linked List Cycle

    非常简单的题:判断链表有没有环(用快慢指针) /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis ...