连通性问题大杂烩

news/2024/10/12 20:53:24

前言

连通性问题确实时一大比较难啃得蛋糕,每次都要先学习一遍,还不如一次学到通

无向图的连通性问题

求割点

连通图:连通图内的所有点都可以互相到达
割点:将割点删掉后整张图不连通

定理1:

一个点s是割点,当且仅当s作为该连通图的根时,会把连通图分为不相连的几部分

定理2:

一个非根节点u是割点,当且仅当u存在一个子节点v不存在一条边连向u的祖先

一开始我认为只要存在一条边连向祖先就不算割点,但这里举出反例:

实现

考虑dfs序,就是将节点编号为dfs遍历到的顺序
我们设一个dfn表示dfs序,设low表示当前节点能回到的最大祖先的编号,只要存在子节点v的\(low[v]>=dfn[u]\) 就可以了

代码

#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
const int N=2e5+5;
int n,m,u,v,tot,ans;
int dfn[N],low[N],vis[N],dot[N];
vector<pii>b[N];
void dfs(int x,int nxt){dfn[x]=low[x]=++tot;vis[x]=1;bool cnt=0;int num=0;for(auto i:b[x]){if(nxt==i.second)  continue;//这里大抵是没有用的int k=i.first;//要开局部变量,不要像我一样手懒开全局变量寄掉if(!vis[k]){num++;dfs(k,i.second);low[x]=min(low[x],low[k]);if(low[k]>=dfn[x])  cnt=1;}else{low[x]=min(low[x],dfn[k]);//无向图中也可以写low}}if(!nxt){if(num>1)  dot[++ans]=x;//注意特判根节点的情况}else if(cnt){dot[++ans]=x;}  
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d",&u,&v);b[u].push_back({v,i});b[v].push_back({u,i});}for(int i=1;i<=n;i++){if(!vis[i]){dfs(i,0);}}sort(dot+1,dot+ans+1);printf("%d\n",ans);for(int i=1;i<=ans;i++){printf("%d ",dot[i]);}
}```
###

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

15-网络安全主动防御技术与应用

15.1 入侵阻断技术与应用 入侵阻断是网络安全主动防御的技术方法,其基本原理是通过对目标对象的网络攻击行为进行阻断,从而达到保护目标对象的目的。 1)原理 防火墙、IDS是保障网络安全不可缺少的基础技术,但是防火墙和IDS 本身存在技术上的缺陷。防火墙是基于静态的粗粒度…

Oracle数据库的查询变慢了

Help!Oracle数据库的查询变慢了! “救命!”一声尖叫划破天空,原本安静的办公室里面突然出现躁动。“咋了?” ,老D问到。发出尖叫的是阿城,他颤抖说道,“原本运行1分钟的SQL,现在运行几个小时,系统是不是要崩了!”老D淡定地扶了下眼镜,瞥了一眼阿城,说到:“好吧,莫慌…

Maven的安装部署(不踩雷版)

在idea中配置maven需注意maven版本和idea版本相匹配。本人使用idea版本为2020.3,jdk1.8,maven3.6.3可以与之相匹配。 一、下载maven maven下载官网地址:https://maven.apache.org/download.cgi 本人使用的maven3.6.3网盘链接:https://pan.baidu.com/s/1TdY9dc-cjI1za_5LRA6…

Nacos服务注册与发现的原理

大致流程 每个服务都会有一个nacos client,它用来和nacos server打交道 用来具体的服务注册 查询等操作,服务提供者在启动的时候会向nacos server注册自己,服务消费者在启动的时候订阅nacos server上的服务提供者。 在大型微服务项目中,服务提供者的数量会非常多,为了管理…

电脑上的一些顺手工具和网站_network

电脑上的一些顺手工具和网站 平常各种地方搜罗到的一些顺手的工具,怕到时候重装系统或者换电脑啥的不方便找,所以记下来。不对软件进行评价和介绍 软件 下载地址直接点击即可下载,地址都为官方地址 卸载工具 名字:geek 官网地址:Geek Uninstaller - the best FREE uninsta…

ProxyPin 抓包,原来可以这么简单!

​ 你是否还在为网络请求的抓包发愁?其实,ProxyPin 可以让抓包操作变得异常简单!不需要复杂的设置,也不用繁琐的配置,轻松几步就能实现。让我们一起来看看吧!抓包操作常用于测试网络请求、分析接口响应,那么 ProxyPin 是如何让这一切变得更简单的呢?它有哪些特色功能,…

JAVASE进阶面试题大总结

​面向对象 1.解释一下什么是继承在编程领域,“继承”是面向对象编程中的一个重要概念。 继承是指一个类(称为子类或派生类)可以从另一个类(称为父类或基类)获取属性和方法。通过继承,子类能够重用父类的代码和功能,同时还可以添加新的属性和方法,或者修改父类中已有的…