割点和桥算法——摘自《算法艺术与信息学竞赛》

http://blog.csdn.net/cicirise/archive/2009/04/13/4068611.aspx

 

最近在做圆桌骑士的问题,在一个无向图中求出双连通分量,判断各双连通分量中是否含有奇圈,求出不能构成奇圈的节点的个数。思路大概明确了,但是写的时候老是出现问题,所以专题又看了一下双连通分量的算法,看来看去,还是刘汝佳的最经典,索性直接手打出来,方便以后再看

void DFS(节点编号k,k的父亲节点编号father,deep)
{
int i,tot;
染色C_k=灰色;
D_k=deep记录顶点k在树中的深度。
//Ancestot_k=deep,tot=0;
for(int i=1;i<=n;i++)
{
If((节点j和k相连)&&(i!=father)&&C_i==灰色)
  Ancestor_k=MIN(Ancestor_k,D_i);
If((节点i和k相连)&&(C_i==白色))
{
  DFS(i,k,deep+1);
  tot++;
  Ancestor_k=MIN(Ancestot_k,Ancestor_i);
  if((k==root&&tot>1)||(k!=root&&Ancestor_i>=D_k)
  cut_k=true;
  if(Ancesot_i>D_k)
  bridge_i,k=true;
}
}
染色C_k=黑色;
}
DFS遍历本身查找除了连通块外并没有多大用途,关键是遍历的同时,可以记下很多有用的信息。下面来看看哪些是与DFS相关的常用信息:
无向连通图的割顶 我们先考虑割顶的性质
 考虑根顶点root。如果顶点x和y同时root的儿子,那么由此证明x无法通过非root的顶点与y相连,所以当根root有数量>1的儿子时,根是图的割顶。
 考虑非根顶点,再考虑i的某个儿子节点j。易知:
1. 和j相连的白色节点丢将成为j的子孙。
2. 和j相连的灰色节点都是j的祖先,由j指向i祖先的边称为后向边。
3. 黑色节点不可能与j相连。
如果i和j的子孙都不存在指向i祖先的后向边,那么删除顶点i后,顶点j和i的祖先或者兄弟将无法连通。因此,当且仅当i的某个儿子及儿子的子孙均没有指向i祖先的后向边是,i是图的割顶。
割顶的求法 在DFS框架的基础上增加Ancestor_k和tot值的计算。
Ancestor_k记录和k以及k的子孙相连的辈分最高的祖先,当Ancestor_j<D_j(j是i的儿子)时j和j的子孙存在指向i祖先的后向边。Tot便是顶点k的儿子的数量。注意,根与非根顶点要注意区别对待。
Cut_k=true表示顶点k为图的割顶
无向连通图的桥 如果y是x的儿子并且Ancestor_y>D_x(注意不是Ancestor_y>=D_x),那么删除边(x,y)后,顶点y将与x不连通,所以(x,y)是图的桥
桥的求法 他也是基于DFS的框架的算法,Bridge_k,i=true表示记录边(i,k)为图的桥

转载于:https://www.cnblogs.com/ZJoy/archive/2011/05/12/2044671.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算参考架构几例

云计算参考架构: 上图阐释如何创建私有和混合云&#xff0c;最终用户可以自行提供计算、 存储和网络。许多大型组织开始创建内部的私有云&#xff0c;来增强其数据中心战略。 58同城的云架构: 百度社区的云架构 结合对弹性服务的理解&#xff0c;第一个是弹性伸缩&#xff0c;你…

C#开源类库推荐:拼多多开放平台SDK,开源免费,支持.NET Core!

今天推荐一个拼多多开放平台DotNet SDK!开源地址&#xff1a;https://github.com/niltor/open-pdd-net-sdk作者&#xff1a;niltor背景介绍来源原文链接&#xff1a;https://www.cnblogs.com/msdeveloper/p/open-pdd-net-sdk.html环境支持支持基于 NETStandardv2.0 的项目&…

【VS2008无法启动asp.net development server】的解决

【VS2008无法启动asp.net development server】的解决 今天在VS2008中浏览打开一个网页时&#xff0c;就弹出对话框“无法启动asp.net development server”&#xff0c;试了很多次都是这样&#xff0c;有时就提示“无法连接到asp.net development server” 在网上找到下面的解…

不同服务器数据库表连接查询修改,如何连接多个数据库,mysql中的服务器和查询两个表中的对方?...

我期待从不同服务器连接两个不同的数据库。此外&#xff0c;我想运行一个查询&#xff0c;从两个数据库中获取数据到一个单一的结果。我正在使用mysql在PHP脚本中执行此操作。这里是如何很期待做[没有成功:)]如何连接多个数据库&#xff0c;mysql中的服务器和查询两个表中的对方…

道理我都懂,但你到底为什么偏偏喜欢咬我??

▲ 点击查看眼看着天气一天天热起来&#xff0c;我这春困还没醒呢&#xff0c;蚊子们倒是醒过来了。每天晚上一关灯&#xff0c;就能听到它在我周围“嗡嗡嗡”地叫&#xff0c;可一开灯&#xff0c;又找不到它在哪儿&#xff0c;心里真是恨得直痒痒。才刚进四月&#xff0c;我就…

python爬虫登录有验证码_大神教你用Python爬虫模拟登录带验证码网站

爬取网站时经常会遇到需要登录的问题&#xff0c;这是就需要用到模拟登录的相关方法。python提供了强大的url库&#xff0c;想做到这个并不难。这里以登录学校教务系统为例&#xff0c;做一个简单的例子。 首先得明白cookie的作用&#xff0c;cookie是某些网站为了辨别用户身份…

创建失败_号称人人都可编辑的百科词条,创建之路为何屡屡失败?

​作为企业推广的第一步&#xff0c;百科词条可以说是最直观最便捷的了&#xff0c;当我们想要了解一个企业的信息&#xff0c;往往上网查找百科信息&#xff0c;而且百科类的权重是比较高的&#xff0c;都会在搜索结果首页展示。而企业需要做百科词条的原因就是&#xff0c;编…

十个必备的.NET开发小工具(1):Snippet Compiler

作者&#xff1a;James Avery 翻译&#xff1a;lucentoff 出处&#xff1a;http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/default.aspx 声明&#xff1a;版权属原作者所有&#xff0c;转载请注明出处&#xff01;本文将介绍下列工具&#xff1a; 代码片段编…

分享一个点赞超过100的漂亮ASP.NET MVC蓝色界面框架

从 陈贞宝 博客中看到一个MVC模板感觉特别漂亮就尝试着分离出来&#xff0c;直接拿来用啦&#xff0c;直接拷贝到自己的常用的代码库里收藏起来&#xff0c;地址是http://www.cnblogs.com/baihmpgy/p/3817613.html 下图是该界面框架的样式。 要使用该界面框架&#xff0c;你可以…

.NET 6 中哈希算法的简化用法

.NET 6 中哈希算法的简化用法Intro微软在 .NET 6 中引入一些更简单的 API 来使用 HMAC 哈希算法&#xff08;MD5/SHA1/SHA256/SHA384/SHA512)微软的叫法叫做 HMAC One-Shoot method, HMAC 算法在普通的哈希算法基础上增加了一个 key&#xff0c;通过 key 提升了安全性&#xff…

iis 404错误从定向完美方案

is 404错误从定向完美方案 自定义404页 面返回不当状态码如“200”等给网站最终SEO效果带来的不利影响&#xff0c;因此&#xff0c;确保自定义的404错误页面能够返回“404” 状态码是极为重要的&#xff0c;也是网站优化与SEO的基本要求。 HTTP404对 SEO的影响   自定义404错…

python 百度百科 爬虫_python简单爬虫

爬虫真是一件有意思的事儿啊&#xff0c;之前写过爬虫&#xff0c;用的是urllib2、BeautifulSoup实现简单爬虫&#xff0c;scrapy也有实现过。最近想更好的学习爬虫&#xff0c;那么就尽可能的做记录吧。这篇博客就我今天的一个学习过程写写吧。 一 正则表达式 正则表达式是一个…

知乎上这个程序员火了,竟是因为给老板修了一 次U盘

全世界只有3.14 % 的人关注了爆炸吧知识相信很多小伙伴曾经遇到这样的问题软件工程▼知识君陷入沉思都说知乎出人才&#xff0c;于是知识君飞赴知乎希望能得到广大网友的点拨&#xff01;知乎上有位朋友就分享了他的经验做为一名全栈程序员居然要我修电脑。你以为我会和领导说告…

mysql 批量_mysql LOAD语句批量录入数据

本章的前面讨论如何使用SQL向一个表中插入数据。但是&#xff0c;如果你需要向一个表中添加许多条记录&#xff0c;使用SQL语句输入数据是很不方便的。幸运的是&#xff0c;MySQL提供了一些方法用于批量录入数据&#xff0c;使得向表中添加数据变得容易了。本节以及下一节&…

VS2010 NDoc的插件工具

1、下载Sandcastle Help File Builder&#xff1a; http://www.codeplex.com/SHFB 2、下载sandcastle&#xff1a; http://www.microsoft.com/downloads/details.aspx?FamilyIDe82ea71d-da89-42ee-a715-696e3a4873b2&DisplayLangen 1、先安装sandcastle&#xff0c;然后安…

回到校园

最近一段时间&#xff0c;作息时间调整的原因&#xff0c;有了周六&#xff0c;周日。今天是星期六&#xff0c;下午没有什么事情&#xff0c;就带了本书&#xff0c;重新回到毕业5年的大学&#xff0c;又去上了一节自习&#xff01;上学的感觉很好呀~~~转载于:https://blog.51…

Abel 分部求和法

本文之所以叫Abel分部求和法而不叫Abel分部求和公式&#xff0c;是因为求和公式有可能形式上有所不同&#xff0c;但是方法确实相同的。 $$\sum_{nM}^{N}a_{n}b_{n} \sum_{nM}^{N} a_{n}B_{n}-\sum_{nM}^{N}a_{n}B_{n-1}$$ 而 $$\sum_{nM}^{N}a_{n}B_{n-1}\sum_{M-1}^{N-1}a_{…

使用Pitcher简化卫语句

什么是卫语句在方法的开头&#xff0c;我们经常会添加一些检查代码&#xff0c;当检查条件为true时立刻从方法中返回。这样的单独检查代码被称为“卫语句”。例如&#xff0c;我们在添加用户时会检查用户名不能为空&#xff0c;年龄必须大于0&#xff1a;public void AddUser(s…

男人的本质需求

1 新的一天也要保持微笑哦2 别拍了&#xff01;快救我&#xff01;3 被可爱到了4 通过薯条学习骨折的分类。从左向右依次是&#xff1a;螺旋骨折、斜向骨折、横向骨折、多段骨折和粉碎性骨折。5 高级玩家啊~6 男人的本质需求你点的每个赞&#xff0c;我都认真当成了喜欢

python小甲鱼爬虫妹子_【Python学习日记】B站小甲鱼:爬虫

Web Spider Python 如何访问互联网 URL lib -->urllib URL的一般格式为 protocol://hostname[:port] / /path /[;parameters][?query]#fragment&#xff0c;其中[]为可选项 URL由三部分组成 第一部分是协议 第二部分是存放资源的服务器的域名系统或IP地址&#xff08;有时…