关于最小生成树,拓扑排序、强连通分量、割点、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. IE7下使用兼容Icon-Font CSS类

    Iconfont在IE7下需要使用unicode方式,但是这种方式不太方便,使用以下代码可使IE7像普通用法使用. @font-face {font-family: "anticon&quo ...

  2. 一次基于innobackupex备份及binlog的单表恢复操作

    [环境介绍] 系统环境:Red Hat Enterprise Linux Server release 7.0 (Maipo) + Server version: 5.7.18-log MySQL C ...

  3. Tree POJ - 1741【树分治】【一句话说清思路】

    因为该博客的两位作者瞎几把乱吹(" ̄︶ ̄)人( ̄︶ ̄")用彼此的智慧总结出了两条全新的定理(高度复杂度定理.特异根特异树定理),转载请务必说明出处.(逃 Pass:anuonei, ...

  4. kail linux虚拟机安装tools工具

    因为自己比较懒,有时候自己不想打字需要粘贴就安装了虚拟机tools工具,又因为自己脑子不好使所以就写一下步骤,以便以后用得着.我这里用得是kail linux系统,不知道contest能不能这样安,下 ...

  5. BUAA-OO-表达式解析与求导

    BUAA-OO-表达式解析与求导 解析 按照常规,解析这一部分我们分为词法分析与语法分析.当然由于待解析的字符串较简单,词法分析器和语法分析器不必单独实现. 词法分析器 按照常规,我们先手写一个词法分 ...

  6. DC综合简单总结(1)

     DC综合简单总结(1)  *****************set_dont_touch和set_dont_touch_network**************** ? 在综合的过程中,为了不让D ...

  7. 自己写的一个用js把select换成div与span与ul的东西

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 切换npm源地址

    全局安装nrm (npm源管理工具) npm install -g nrm 查看所有的源地址   * 代表当前的源地址 nrm ls * npm ----- https://registry.npmj ...

  9. 快速搭建Docker Registry私有仓库

    前提条件: 服务器已经安装Docker(我的服务器是CentOS 7) 服务器已经安装Docker Compose 满足以上条件时就可以开始搭建了: 1. 生成用户密码文件:(运行下面命令后会在当前目 ...

  10. W3CSchool闯关笔记(初级脚本算法)

    W3C后台校验代码bug很多,有的时候跑不过不一定是自己代码写得有问题,也许是网页后台的bug,可以自己把代码放到本地的html文件中跑一下看看 function reverseString(str) ...