当前位置: 首页 > wzjs >正文

毕业设计做旅游网站网页升级紧急通知 2022狼

毕业设计做旅游网站,网页升级紧急通知 2022狼,网站开发 外包空心,wordpress cos-html-cache割点 定义: 若一个点在图中被去掉后,图的连通块个数增加,那么这个点就被称为“割点”。如下图所示红点。 定义说白了就是若去掉一个点,图被“断开”的点称为割点。 朴素算法: 枚举每个点 u。遍历图,如果…

割点

定义:

若一个点在图中被去掉后,图的连通块个数增加,那么这个点就被称为“割点”。如下图所示红点。

定义说白了就是若去掉一个点,图被“断开”的点称为割点。

朴素算法:

  • 枚举每个点 u。
  • 遍历图,如果有一个点或多个点遍历不到(遍历期间不能经过点 u),那么 u 就是割点。

时间复杂度: O ( N 2 ) O(N^2) O(N2)

可作为对拍暴力程序。

正解:Tarjan

定义一些东西:

  1. 时间戳:dfs 时表示每个点被遍历到的“时间”,可用一个不断增加的变量实现。记为 d f n dfn dfn
  2. 搜索树:dfs 时由遍历到的边组成的树(由于有打标记,所以不会重复访问)。
  3. 追溯值:以 u 为根的子树中,所有不经过 u 能够到达的节点的时间戳的最小值。记为 l o w low low
关于追溯值:

结合张图来理解:

设红边为搜索树的边,则 3 3 3 号点因为有蓝色的边不经过他的父亲 2 2 2 号点,直接到达了 1 1 1 号点,所以 l o w 3 = d f n 1 low_3=dfn_1 low3=dfn1

回归 Tarjan

有一个重要的概念:

一个点 u 如果是割点,那么它的子树中的一些节点 v 的 l o w v low_v lowv 是大等于 d f n u dfn_u dfnu 的,因为它到不了上面(上面的意思是搜索树中比 u 更早遍历到的点集)。

显然, l o w u low_u lowu 表示假设断开点 u 孩子们还能遍历到的最早时间戳。

l o w v ≥ d f n u low_v\ge dfn_u lowvdfnu (v 是 u 的孩子),即 v 回不到 u 前,那么就表示 u 是割点。

s s s 个这样的 v 就代表断开 u 可以把原先的连通图变成 s + 1 s+1 s+1 个连通块(u 上方也是一个)。

遍历路上

对于每个点 u,遍历到的儿子 v 有两种可能:

  1. d f n v = 0 dfn_v=0 dfnv=0

说明 v 是新加入搜索树中的节点,那么就先递归下去,用 l o w v low_v lowv 更新 l o w u low_u lowu

l o w u = m i n ( l o w u , l o w v ) low_u=min(low_u,low_v) lowu=min(lowu,lowv)

  1. d f n v ≠ 0 dfn_v\neq 0 dfnv=0

说明 v 曾经

被遍历过,是搜索树上 u 的祖先,那么用 d f n v dfn_v dfnv 更新 l o w u low_u lowu

l o w u = m i n ( l o w u , d f n v ) low_u=min(low_u,dfn_v) lowu=min(lowu,dfnv)

然而上述办法还是有 bug。想想在哪呢?

发现 bug

假设我们搜索树从 1 1 1 号点开始遍历,给张图你就懂。

如图。

因为我们是从 1 1 1 号点开始遍历的, 1 1 1 号点是搜索树的根,它哪来的祖先能让孩子们去更新追溯值啊!!!

而图中的 1 1 1 号点又显然不是割点。

咋办呢?

解决 bug

特判呗。反正根只有一个。

这时候我们得思考:什么样的情况下根是割点?

反正追溯值做不了了。

那么看看朴素的图吧。

图中 1 1 1 号点就是割点。

为啥嘞?

答:因为把它删了后有两个连通块。

正解。

我们记录一下,如果它在搜索树上的儿子不止一个,那么它就是割点。

就这么简单?

就这么简单。

这时候不知道有没有同学有个疑惑和我初学时一样的,如图:

红色的是搜索树边。

图中 1 1 1 不是割点啊,但它在树上还真有两个孩子啊??

如果您一开始没看出来哪儿错了,就点个赞再走吧。

注意到边 3 → 2 3\rightarrow 2 32 1 → 2 1\rightarrow 2 12

当我们遍历到点 3 3 3 的时候,它就会顺带把 2 2 2 号点先遍历了。先遍历到 2 2 2 再遍历 3 3 3 同理。

所以说搜索树应该为:

或:

OK,下班,看题。

洛谷 P3388 【模板】割点(割顶)。

题意很简略了。就是看看实现。

#include<bits/stdc++.h>
using namespace std;
const int N=2e4+5,M=1e5+5;
int n,m,ehead[N],cnt_e,low[N],dfn[N],idx,rt,cntans;
bool ans[N];//是否为割点
struct E{int to,pre;
}e[M<<1];
void adde(int from,int to)
{e[++cnt_e].to=to;e[cnt_e].pre=ehead[from];ehead[from]=cnt_e;return;
}
void dfs(int u)
{low[u]=dfn[u]=++idx;int chtree=0;//如果是根的话,它的孩子个数for(int i=ehead[u];i;i=e[i].pre){int v=e[i].to;if(!dfn[v])//不在搜索树上{dfs(v);low[u]=min(low[u],low[v]);if(rt==u)++chtree;if(low[v]>=dfn[u]&&rt!=u&&(!ans[u]))//注意 (!ans[u])。搞不好会重复算 cntans{++cntans;ans[u]=1;}}else//返祖边low[u]=min(low[u],dfn[v]);}if(u==rt&&chtree>1&&(!ans[u])){++cntans;ans[u]=1;}return;
}
int main(){ios::sync_with_stdio(0);cin>>n>>m;for(int i=1,u,v;i<=m;++i){cin>>u>>v;adde(u,v);adde(v,u);}for(int i=1;i<=n;++i)//图不保证联通{if(!dfn[i]){rt=i;dfs(i);}}cout<<cntans<<'\n';for(int i=1;i<=n;++i)if(ans[i])cout<<i<<' ';cout<<'\n';return 0;
}

闲话时间

讲个好玩的,这篇文章是我晚上十一点左右写的,但是:

我来自报家门了。

正题。

Tarjan 算法不光能解决割点的问题,改一改还能当作强连通分量和割边(又称桥)和双连通分量等等。

说到强连通分量,推销一下我的学习笔记不过分吧 qwq。

完结撒花。


文章转载自:

http://SewOjVsl.sqfrg.cn
http://2dB0ixL9.sqfrg.cn
http://MDWDLUP6.sqfrg.cn
http://vVe559EA.sqfrg.cn
http://lZYrQRbw.sqfrg.cn
http://s6WJX5L5.sqfrg.cn
http://rehCihsi.sqfrg.cn
http://VN8Beo9u.sqfrg.cn
http://jwKNPeWQ.sqfrg.cn
http://sUtCkYfC.sqfrg.cn
http://f4xWJ9a0.sqfrg.cn
http://XdoyOPuL.sqfrg.cn
http://KtxTGUhs.sqfrg.cn
http://P6H3rkqQ.sqfrg.cn
http://yJtQ1M9C.sqfrg.cn
http://F2MgvAij.sqfrg.cn
http://eMEz1v8D.sqfrg.cn
http://aa6Zu1Nx.sqfrg.cn
http://f711xVxT.sqfrg.cn
http://V1CyjBMm.sqfrg.cn
http://PeQtcUfF.sqfrg.cn
http://Ph8LcA2e.sqfrg.cn
http://JJbjgKOA.sqfrg.cn
http://gacApy8P.sqfrg.cn
http://1PbIFKRF.sqfrg.cn
http://4bAqnvkV.sqfrg.cn
http://9pEQKMWW.sqfrg.cn
http://x0S97R3F.sqfrg.cn
http://XbfI1r7s.sqfrg.cn
http://uQ6Vsjar.sqfrg.cn
http://www.dtcms.com/wzjs/703886.html

相关文章:

  • 网站开发的进度控制计划表四川做网站公司
  • 长沙网站建设大概多少钱怎么推广自己的qq群
  • 番禺区网站建设哪家好wordpress主题手机制作
  • 黄埔网站建设苏州网站建设熊掌号
  • 公司网站是如何搭建的大名做网站
  • 沈阳做网站的设计公司哪家好电子商务网站的建设与流程
  • 什么程序做网站动漫设计与制作属于什么专业类别
  • 芦苞网站建设支付宝手机网站支付前端怎么做
  • 网站推广员工作咋样百度打开百度搜索
  • 自己做的网站谁来维护网站开发搜索功能怎么实现
  • 大连网站建设网站django做网站
  • wordpress在线优化揭阳新站seo方案
  • 建设工程教育网站网络公司网站
  • 网站建设硬件需求用ai做网站
  • 做一款推荐类的网站信诚网络公司网站
  • 俄文网站引擎个人做seo怎么赚钱
  • 咨询聊城网站建设合肥网站建设步骤
  • 服务器上建设网站郑州建设工程协会网站
  • 东营网站开发招聘伍佰亿网站
  • 网站设网页设计WordPress注册添加
  • 海南省住建设厅网站报监管局审核网站名称
  • 电话开发网站建设话术滨州五学一做考试网站
  • 网站排名怎么提升浅谈全球五金网电子商务网站建设
  • wordpress资源站邢台123生活信息
  • 做二手网站威海市住房和城乡建设局网站
  • 中企动力做网站费用申请网站建设经费的请示
  • 昆明北京网站建设网站建设的心得与体会
  • 微信 app 微网站 整合h5自助建站系统
  • 公司网站开发技巧做板子焊接的网站的公司名字
  • 房地产公司网站建设pptxyz域名