关于最小生成树,拓扑排序、强连通分量、割点、2-SAT的一点笔记
关于最小生成树,拓扑排序、强连通分量、割点、2-SAT的一点笔记
前言:近期在复习这些东西,就xjb写一点吧。当然以前也写过,但这次偏重不太一样
MST
最小瓶颈路:u到v最大权值最小的路径。在最小生成树上。是次小生成树的一个子问题qwq
最小极差生成树:枚举最小生成树上的最小权值的大小
topo sort
应用:
- 可以去掉基环树上的树
- 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'都为真)
应用:
判断某个变量在该系统中是否可取真:
从此变量开始dfs即可
求字典序最小的解:
从小到大,先赋值真染色,冲突的话把这次染色回滚掉,再赋值假染色
就是说进行x时,1...x-1时dfs染色的结果还保留着
复杂度:最坏\(O(nm)\)
优势在于我们拥有决定一个变量取值的能力
SCC做法
原图有对称性
显然一个scc中的点要么都选要么都不选,x和x'在同一个scc中则无解
缩点,反向连边
进行拓扑排序,选第一个未染色的点,染白色,然后将否定点及其新图后代dfs染黑色(注意边是反向的,所以一个点为假那么他的后代一定为假)。重复此过程。
复杂度:\(O(m)\)
局限性很强,只能判断是否有解和构造一组解
字典序最小的解也不可做,因为toposort中不断加入ind=0的新点,标号更小的点可以是后加入的(但这时这个点可能已经因为之前的煞笔操作而被染成黑色了)
关于最小生成树,拓扑排序、强连通分量、割点、2-SAT的一点笔记的更多相关文章
- Day3 最短路 最小生成树 拓扑排序
Day3 最短路 最小生成树 拓扑排序 (一)最短路 一.多源最短路 从任意点出发到任意点的最短路 1. Floyd \(O(n^3)\) for(int k=1;k<=n;k++) for(i ...
- 小结:双连通分量 & 强连通分量 & 割点 & 割边
概要: 各种dfs时间戳..全是tarjan(或加上他的小伙伴)无限膜拜tarjan orzzzzzzzzz 技巧及注意: 强连通分量是有向图,双连通分量是无向图. 强连通分量找环时的决策和双连通的决 ...
- 【学习整理】Tarjan:强连通分量+割点+割边
Tarjan求强连通分量 在一个有向图中,如果某两点间都有互相到达的路径,那么称中两个点强联通,如果任意两点都强联通,那么称这个图为强联通图:一个有向图的极大强联通子图称为强联通分量. 算法可以在 ...
- 强连通分量(Korasaju & Tarjan)学习笔记
好久以前学过的东西...现在已经全忘了 很多图论问题需要用到强连通分量,还是很有必要重新学一遍的 强连通分量(Strongly Connected Component / SCC) 指在一个有向图中, ...
- 模板 - 强连通分量/割点/桥 - Tarjan
int dfn[N], low[N], dfncnt, s[N], tp; int scc[N], sc; // 结点 i 所在 scc 的编号 int sz[N]; // 强连通 i 的大小 voi ...
- Kosaraju算法解析: 求解图的强连通分量
Kosaraju算法解析: 求解图的强连通分量 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 定义 连通分量:在无向图中,即为连 ...
- HDU.2647 Reward(拓扑排序 TopSort)
HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...
- 【强连通分量】 Kosaraju和Tarjan算法 (标准模板+详细注释)
codevs 题意:求最大强连通分量的大小以及所包含的顶点有哪些 Tarjan算法 #include<iostream> #include<queue> #include< ...
- HUST——1103Party(拓扑排序+个人见解)
1103: Party Time Limit: 2 Sec Memory Limit: 64 MB Submit: 11 Solved: 7 Description N students were ...
随机推荐
- 面向对象学习(python)
面向对象总结 一.面向对象与面向过程的区别 面向过程:根据业务逻辑从上到下写垒代码 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 1.面向过程编程: 概念:发过程中最常见的操作就是粘贴 ...
- SQLServer如果查询表相关的视图以及存储过程
最近在维护一个电商平台,需要对订单表增加字段,但是在review代码的时候发现这个平台的代码写的很有提升价值,且大量的使用了识图和存储过程,所以也给刚接触这个平台的萌新,也就是瓦,造成了不小的困扰,毕 ...
- [转] GloVe公式推导
from: https://pengfoo.com/post/machine-learning/2017-04-11 GloVe(Global Vectors for Word Representat ...
- spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,guava限流,定时任务案例, 发邮件
本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...
- 关于Android8及以上版本自定义广播无法接收问题
高版本Android直接发送广播是无法接收的 e.g. sendBraodcast(intent); 需要在前面加上(前一个String为接收广播应用的项目地址,后一个为该广播类的地址) intent ...
- c++ Qt向PHP接口POST文件流
Qt调用PHP写的接口,向其传递图片文件,并保存在服务器. 二进制文件无法直接传递,Qt采用Base64进行编码发送,PHP解码保存为文件. 注意:PHP收到数据之后会将POST过来的数据中的加号(+ ...
- $(document).ready和window.onload的区别
$(document).ready比window.onload先执行.window.onload只执行一次. $(document).ready和window.onload都是在都是在页面加载完执行的 ...
- gatewayworker开发单聊应用解决的问题
绑定唯一id时,遇到的信息发送同步问题 问题:A-B A-C A发送信息给B和C时 A绑定了唯一id 若B.C发送信息给A则A处会同时手到来自于BC的信息 用解绑和生成新的client_id无法避 ...
- 蓝盾杯writeup
由于比赛时只给了内网,web题目无法复现,这里就简单写一下misc的部分题目 1.眼花了吗 (默默吐槽居然是来自实验吧的原题) 提示:当眼花的时候会显示两张图,可以想到应该是包含双图的情况 用fore ...
- JS学习过程中碰到的小问题
使用循环语句查找通讯录 //Setup var contacts = [ { "firstName": "Akira", "lastName" ...