图的连通性问题的小结 (双连通、2-SAT)
图的连通性问题包括:
1、强连通分量。
2、最小点基和最小权点基。
3、双连通。
4、全局最小割。
5、2-SAT
一、强连通分量
强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具。
有三种算法:
1、Kosaraju算法。对原图和反图分别进行一次深度优先搜索。
2、Tarjan算法。用了时间戳。
3、Garbow算法。与Tarjan算法是同一思想,但更精妙。
三种算法的模版我已经贴过了 http://www.cnblogs.com/Potato-lover/p/3956604.html
二、最小点基和最小权点基
这个我单独做了总结 http://www.cnblogs.com/Potato-lover/category/606571.html
三、双连通
这个也单独做了总结 http://www.cnblogs.com/Potato-lover/p/4001179.html
四、全局最小割
学了网络流都知道,最小割问题等价于最大流问题。但是最大流的时间复杂度是O(n*n*n*m), 有时候出题者就要卡时间,最大流算法会超时。
Stoer-Wanger算法:
算法的思想是:对于图中的任意两个顶点u和v,如果它们属于同一个集合,那么将顶点u和顶点v合并以后并不影响图的最小割。
时间复杂度为O(n*n*n) 。
题目:
Hdu 3691 Nubulsa Expo 类似与hdu2914
建图以后直接上模版(主要是要知道有这个算法)
模版中顶点标号是从0开始的,存图的时候从0开始不用修改模版。题中有重边,重边的处理是把所有的边权值加起来作为一条边。所以矩阵初始化为0。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=, INF=0x3f3f3f3f;
int Map[N][N],Node[N],dis[N];
bool vis[N];
int ans;
void SW(int n)
{
int maxj,pre,m,i,j;
ans=INF;
for(i=;i<n;i++) Node[i]=i;
while(n>)
{
m=-; maxj=;
for(i=;i<n;i++)
{
dis[Node[i]]=Map[Node[]][Node[i]];
vis[Node[i]]=;
if(dis[Node[i]]>m) {m=dis[Node[i]];maxj=i;}
}
pre=;
vis[Node[]]=;
for(j=;j<n;j++)
{
vis[Node[maxj]]=;
if(j==n-)
{
ans=min(ans,m);
for(i=;i<n;i++)
{
Map[Node[pre]][Node[i]]+= Map[Node[maxj]][Node[i]];
Map[Node[i]][Node[pre]]+= Map[Node[maxj]][Node[i]];
}
Node[maxj]=Node[--n];
}
else
{
pre=maxj; m=-;
for(i=;i<n;i++)
{
if(!vis[Node[i]])
{
dis[Node[i]] += Map[Node[pre]][Node[i]];
if(dis[Node[i]]>m) {m=dis[Node[i]]; maxj=i;}
}
}
}
}
}
}
int main()
{
freopen("test.txt","r",stdin);
int n,m,s,i,j,k;
while(scanf("%d%d%d",&n,&m,&s)!=EOF&&n)
{
memset(Map,,sizeof(Map));
while(m--)
{
scanf("%d%d%d",&i,&j,&k);
i--;j--;
Map[i][j]+=k; Map[j][i]+=k;
}
SW(n);
printf("%d\n",ans);
}
return ;
}
五、2-SAT
以前做出总结 http://www.cnblogs.com/Potato-lover/p/3965512.html
PS:参考资料主要来自《图论及应用》,哈尔冰工业大学出版。
图的连通性问题的小结 (双连通、2-SAT)的更多相关文章
- 图的强连通&双连通
http://www.cnblogs.com/wenruo/p/4989425.html 强连通 强连通是指一个有向图中任意两点v1.v2间存在v1到v2的路径及v2到v1的路径. dfs遍历一个图, ...
- poj 3352 Road Construction【边双连通求最少加多少条边使图双连通&&缩点】
Road Construction Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10141 Accepted: 503 ...
- 图的割点 桥 双连通(byvoid)
[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集 ...
- Tarjan-割点&桥&双连通
$Tarjan$求割点 感觉图论是个好神奇的东西啊,有各种奇奇怪怪的算法,而且非常巧妙. 周末之前说好回来之后进行一下学术交流,于是wzx就教了$Tarjan$,在这里我一定要说: wzx AK ...
- HohoCoder 1184 : 连通性二·边的双连通分量(+原理证明)
1184 : 连通性二·边的双连通分量 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在基本的网络搭建完成后,学校为了方便管理还需要对所有的服务器进行编组,网络所的老师 ...
- 图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会
先来%一下Robert Tarjan前辈 %%%%%%%%%%%%%%%%%% 然后是热情感谢下列并不止这些大佬的博客: 图连通性(一):Tarjan算法求解有向图强连通分量 图连通性(二):Tarj ...
- Tarjan算法——强连通、双连通、割点、桥
Tarjan算法 概念区分 有向图 强连通:在有向图\(G\)中,如果两个顶点\(u, v\ (u \neq v)\)间有一条从\(u\)到\(v\)的有向路径,同时还有一条从\(v\)到\(u\)的 ...
- hihoCoder 1184 连通性二·边的双连通分量
#1184 : 连通性二·边的双连通分量 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在基本的网络搭建完成后,学校为了方便管理还需要对所有的服务器进行编组,网络所的老 ...
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径1
import java.util.ArrayList; import java.util.List; // 模块E public class AdjMatrixGraph<E> { pro ...
随机推荐
- 6——Z 字形变换(ZigZag Conversion)
题目描述将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I RE T O E S ...
- 【剑指Offer】30、连续子数组的最大和
题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是 ...
- namespace、struct、enum、union、string(day01)
一 C++概述 C++历史背景 )C++的江湖地位 jave C C++ C# python )C++之父:Bjarne Stroustrup(--) ,Cpre,为C语言增加类的机制 ,Bjarne ...
- js中window.location的用法
用window.location处理解析当前页面URL window.location 对象所包含的属性 属性 描述 hash 从井号(#)开始的URL(锚点) host 主机名和当前URL的端口号 ...
- C#--Task知识点
5天玩转C#并行和多线程编程 TASK使用总结 Task是什么,字面意思是任务 表示一个异步操作.它是异步操作的首选方式.Task是FRAMEWORK4中的新特性,封装了以前的Thread,并管理Th ...
- javascript--闭包与this
理解javascript中的闭包与this http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html http: ...
- js 跨浏览器获取事件信息模块
var EventUtil = { addHandler: function(element, type, handler) { if (element.addEventListener) { ele ...
- 互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点
http://www.cnblogs.com/charlesblc/p/6341265.html 其中的一篇. 参考 https://zhuanlan.zhihu.com/p/20336461?ref ...
- [深入理解Android卷一全文-第七章]深入理解Audio系统
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- MySQL数据库——存储和函数
一.存储过程1 基本语法CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 格式[I ...