首页 > 其他分享 >连通性问题大杂烩

连通性问题大杂烩

时间:2024-10-12 20:43:58浏览次数:1  
标签:连通性 int 割点 dfs 大杂烩 问题 dfn low 节点

前言

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

无向图的连通性问题

求割点

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

定理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]);
	}
}```
###

标签:连通性,int,割点,dfs,大杂烩,问题,dfn,low,节点
From: https://www.cnblogs.com/zcxnb/p/18461467

相关文章

  • 【原创】修复freeepascal自带的tdbf组件使用中文字段时转换为utf8时可能出现文字错的
    修复freeepascal自带的tdbf组件字段名称使用中文时转换为utf8时可能出现文字错:修改方法:打开fpcsrc\packages\fcl-db\src\dbase\dbf_dbffile.pas修改第816/1236/1246/1842/2758行,将AnsiUpperCase改为UpperCase。重新编译fpcsrc源码或将dbase文件夹拷贝到project目录,重新编译proje......
  • proteus-7.8的安装教程+安装产生的问题+创建桌面快捷方式
    20241012,记录一下老师教的Proteus7.8的安装过程,以及自己在安装过程中产生的问题目录安装过程1-21出现Nolicencekeyisinstalled的问题解决方法,请看8proteus的破解方法,请看17-20寻找proteus,创建桌面快捷方式,请看211.新建一个文件夹,Proteus(建议放在D盘)2.解压Proteus-......
  • 5.5求非凸函数的线性规划问题
    importnumpyasnpfromscipy.optimizeimportminimizedefobjective(x):return2*x[0]+3*x[0]**2+3*x[1]+x[1]**2+x[2]defconstraint1(x):return10-(x[0]+2*x[0]**2+x[1]+2*x[1]**2+x[2])defconstraint2(x):......
  • 解决Gerrit+Nginx+Git LFS传大文件失败的问题
    首先有两个位置要放开限制:一是nginx这边上传文件大小要放开。编辑/etc/nginx/conf.d/gerrit.conf:client_max_body_size500m二是gerrit这边lfs的大小限制要放开。拉取All-Projects仓库,执行$gitfetchoriginrefs/meta/config$gitcheckoutFETCH_HEAD然后添加一个lfs.c......
  • Kali 网络配置及常见问题和解决方案
    Kali网络IP地址配置及常见问题和解决方案说明:不是一定要设置固定IP,动态IP(默认不设置)只要能联网,就可以正常使用。1Kali配置固定IP如果校园网、办公网络、拨号网络可能存在网络验证,如果是以上网络环境的同学,必须使用虚拟机的NAT模式网络,其他使用桥接或NAT都可以。......
  • nginx刷新reload不生效问题排查
    问题现象有个项目现场同事说他修改了nginx的配置,也执行了reload命令,但是就是不生效,而且能够正常访问nginx,不清楚为什么。怎么办,什么年代了,当然是让他问问AI看怎么肥事。他说问了几个AI,也照着试了,把配置文件都给AI看了,都说没啥问题,AI让重启,让检查网络问题,让查看日志输出。很好,......
  • 中车通如何有效应对eclive.dll丢失问题:eclive.dll丢失问题的全面解决策略
    在使用中车通(ZhongCheTong.exe)软件时,有时可能会遇到系统提示“由于找不到eclive.dll,无法继续执行代码”的错误。这通常意味着eclive.dll文件已经丢失或未正确安装,导致软件无法正常运行。为了有效应对这一问题,以下提供一套全面的解决策略。一、了解eclive.dll文件的重要性ecl......
  • java 网络知识 + 多线程问题
    服务器:packagep1007;importjava.io.*;importjava.net.*;importjava.util.Random;publicclassServer{publicstaticvoidmain(String[]args){intport=12345;//服务端口try(ServerSocketserverSocket=newServerSocket(port)......
  • windows问题记录1
    隐藏启动分区1、win+R运行命令diskmgmt.msc2、选择要隐藏的系统盘符,右键——更改驱动器号和路径3、将当前盘的驱动器号删除,删除时会提示两次,删除后电脑将不能访问此盘。不要将c盘取消驱动器号,负责可能系统无法启动。 关闭系统自动播放需求:挂载cd盘,cd盘内容自动被打开并运......
  • LLM面试问题
    1、大模型LLM的训练目标大语言模型(LLM)的训练目标通常是最大似然估计。最大似然估计是一种传统方法,用于从给定数据中估计概率模型的参数。在LLM的训练过程中,使用的数据通常是大量的文本语料库。训练目标是最大化模型生成训练数据中观察到的文本序列的概率。具体来说,对于每......