P3388 【模板】割点(割顶)

news2025/1/10 17:05:43

题目背景

割点

题目描述

给出一个 n 个点,m 条边的无向图,求图的割点。

输入格式

第一行输入两个正整数 n,m。

下面 m 行每行输入两个正整数 x,y 表示 x 到 y 有一条边。

输出格式

第一行输出割点个数。

第二行按照节点编号从小到大输出节点,用空格隔开。

输入输出样例

输入
6 7
1 2
1 3
1 4
2 5
3 5
4 5
5 6
输出
1 
5

做这道题,我们先得直到什么是割点,割点是指去掉之后可以让图不再联通,这样说可能有点难懂,我们可以画个图

这张图中,哪个点事割点呢?1号点去掉,图依旧联通,3号去掉,4号去掉,5号去掉影响都不大,这张图的割点是2号点,这下应该对割点有了解了吧

 好,了解了割点,开始解题

首先得解决一个最重要的问题,怎么判断割点?

我们先回顾一遍之前的题目:受欢迎的牛

我们这里判断割点的方法,就是比较当前点的时间戳和追溯值

这里分成两类讨论:

第一类:当前点不是根节点

这种情况下,我们遍历当前点能访问到的所有点 ,如果没找过,那么如果与当前点x相连的y点的追溯值大于等于了x点的时间戳,x就是割点

if(x!=root&&low[y]>=dfn[x])cut[x]=1;

为什么这么判断呢?我们画个图

 

第二类:当前点是根节点

是根节点就很简单了,只要他直接连接的点大于等于两个点,这个点一没,整张图是不是就断开了

所以,我们记录一下根节点连接的边的数量,如果大于等于二,它就是割点

分析完思路,代码放在下面

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m;
int dfn[N];//时间戳
int vis[N];
int low[N];//追溯值
int cut[N];
vector<int>a[N];
int cnt;
int times;
void tarjan(int x,int root){
	vis[x]=1;
	dfn[x]=low[x]=++times;
	int s=0;
	for(int i=0;i<a[x].size();i++){
		int y=a[x][i];
		if(dfn[y]==0){
			s++;//记录所能到达的边数量
			tarjan(y,root);
			low[x]=min(low[x],low[y]);
			if(x!=root&&low[y]>=dfn[x])cut[x]=1;//不是根
			if(x==root&&s>=2)cut[x]=1;//是根
		}
		else{
			low[x]=min(low[x],dfn[y]);
		}
	}
}
main(){
	scanf("%d%d",&n,&m);
	int u,v;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		a[u].push_back(v);
		a[v].push_back(u);
	}
	for(int i=1;i<=n;i++)if(dfn[i]==0)tarjan(i,i);
	int cnt=0;
	for(int i=1;i<=n;i++)if(cut[i])cnt++;
	printf("%d\n",cnt);
	for(int i=1;i<=n;i++)if(cut[i])printf("%d ",i);
}

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

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

相关文章

实验五 网络中的树

文章目录 5.1 网络中的树第一关 认识树相关知识编程要求代码文件 第2关 根节点的二阶邻居求解方法相关知识编程要求代码文件 第3关 根节点的n阶邻居求解方法相关知识 5.2 权值矩阵与环&#xff08;无向网络&#xff09;第1关 无向网络的权值矩阵相关知识编程要求代码文件 第2关…

CrossOver 2024软件下载-CrossOver 2024详细安装教程

Crossover软件是一款可以在Mac、Linux和Chromebook上运行Windows程序的软件。 它是一款商业软件&#xff0c;由CodeWeavers公司开发&#xff0c;Crossover不是一个虚拟机或模拟器&#xff0c;它使用Wine技术来将Windows程序直接转换成可以在其他操作系统上运行的程序&#xff0…

基于SpringBoot3+Vue3宠物小程序宠物医院小程序的设计与实现

大家好&#xff0c;我是程序员小孟。 最近开发了一个宠物的小程序&#xff0c;含有详细的文档、源码、项目非常的不错&#xff01; 一&#xff0c;系统的技术栈 二&#xff0c;项目的部署教程 前端部署包&#xff1a;npm i 启动程序&#xff1a;npm run dev 注意事项&…

HSP_07章 排序和查找

P96_ 冒泡排序 排序的基本介绍 冒泡排序介绍 冒泡排序思路分析 代码 # 说明,如果只是完成排序功能,我们可以直接使用list的方法sort # 排序的列表 num_list[24,69,80,57,13,0,900,-1] print("排序前".center(32,"-")) print(f"num_list: {num_list}…

Ceph入门到精通-Bucket 生命周期的作用,新手该如何设置?

存储桶(Bucket)生命周期策略的作用主要是帮助存储管理员高效地管理对象的存储周期,包括对象的转换、存档和删除。以下是关于桶生命周期的作用和配置的概述: 一、桶生命周期的作用: 存储优化:通过将对象转换到更经济的存储类别,降低存储成本。 数据管理:自动删除不再需…

交换机简介

一、 集线器的替代品—交换机 使用集线器的缺点&#xff0c;因此就设计出了交换机来代替集线器&#xff0c;交换机常见端口数量一般有4、8、16、24、32等数量。 华为交换机&#xff1a;S5720-HI系列 仅从实物图上来看&#xff0c;交换机和集线器非常的像&#xff0c;但是它们的…

Python第二语言(十一、Python面向对象(下))

目录 1. 封装 1.1 私有成员&#xff1a;__成员、__成员方法 2. 继承&#xff1a;单继承、多继承 2.1 继承的基础语法 2.2 复写 & 子类使用父类成员 3. 变量的类型注解&#xff1a;给变量标识变量类型 3.1 为什么需要类型注解 3.2 类型注解 3.3 类型注解的语法 3.…

visio添加表格

插入Excel表格&#xff1a; 打开Microsoft Visio&#xff0c;新建一个空白画布。点击菜单栏中的“插入”。在插入中点击“图表”。在弹出的插入对象设置页面中选择“Microsoft Excel工作表”。点击确定按钮&#xff0c;然后在表格中输入内容。将鼠标点击到画布的空白处&#x…

大数据在商业中的应用——Kompas.ai如何助力企业决策

引言 在现代商业中&#xff0c;大数据逐渐成为企业决策的重要工具。通过对海量数据的分析和处理&#xff0c;企业可以获得重要的市场信息和决策支持。本文将探讨大数据在商业中的应用&#xff0c;并介绍Kompas.ai如何通过AI技术助力企业决策。 大数据的发展及其重要性 大数据…

迅狐跨境商城系统|全平台兼容|前端采用uni-app跨端框架,后端采用ThinkPHP5框架

高效实现全平台兼容的迅狐跨境商城系统 迅狐跨境商城系统是一款专为跨境电商企业设计的全平台兼容系统。其前端采用uni-app跨端框架&#xff0c;后端采用ThinkPHP5框架&#xff0c;旨在实现高效的开发和运营管理。 1. 全平台兼容的前端设计 迅狐跨境商城系统的前端采用uni-a…

MathType7.6永久免费功能强大的数学公式编辑器

亲爱的科技博主们&#xff0c;今天我要给大家种草一个神奇的工具——MathType 7.6&#xff01;&#x1f9ee;✨ 作为一名科技博主&#xff0c;我经常需要处理各种复杂的数学公式和符号。以前我总是为这个问题烦恼不已&#xff0c;但是自从我发现了MathType 7.6&#xff0c;一切…

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…

AVR晶体管测试仪开源项目编译

AVR晶体管测试仪开源项目编译 &#x1f4cd;原项目地址&#xff1a;https://github.com/Mikrocontroller-net/transistortester/tree/master&#x1f33f; https://github.com/svn2github/transistortester&#x1f33f; https://github.com/wagiminator/ATmega-Transistor-Tes…

python 只有ListNode类的情况下,创建链表和遍历链表

class ListNode:def __init__(self, val0, nextNone):self.val valself.next nextif __name__ __main__: linklist dummy ListNode() for x in ([2,4,3]): linklist .next ListNode(x) linklist linklist .nextwhile dummy:print(dummy.val)dummy dummy.next 这里的…

互联网应用主流框架整合之SpringMVC基础组件开发

多种传参方式 在前一篇文章互联网应用主流框架整合之SpringMVC初始化及各组件工作原理中讨论了最简单的参数传递&#xff0c;而实际情况要复杂的多&#xff0c;比如REST风格&#xff0c;它往往会将参数写入请求路径中&#xff0c;而不是以HTTP请求参数传递&#xff1b;比如查询…

云渲染动画:C4D如何正确渲染导出动画?

​C4D是一款功能强大的3D建模、动画和渲染软件&#xff0c;在制作动画时&#xff0c;正确的渲染和导出流程至关重要&#xff0c;以确保动画质量和流畅性。 帧率概念 动画就是一幅幅图片连贯起来&#xff0c;30帧/秒&#xff0c;就是一秒出现30张图片一般国外都是30&#xff0c…

2024年6.18有必要购买正版FL Studio21吗?

对于是否需要购买FL Studio的正版软件&#xff0c;我们认为强烈推荐用户购买正版软件&#xff0c;而不是使用盗版软件。 FL Studio 21是一款功能强大的音乐编曲制作软件。尽管你可能没有接触过音乐制作&#xff0c;也能通过fl Studio 21&#xff0c;撰写&#xff0c;整理&#…

3dmax在设计3D模型时闪退解决方法---模大狮模型网

3ds Max 在设计 3D 模型时闪退可能由多种原因造成&#xff0c;以下是一些常见的解决方法&#xff1a; 更新显卡驱动程序&#xff1a; 一个过时或不稳定的显卡驱动程序可能导致 3ds Max 闪退。请确保你的显卡驱动程序是最新版本&#xff0c;并且与 3ds Max 兼容。 关闭不必要的…

轻易云-轻企AI知识库的智能创作与个性化管理

随着人工智能技术的飞速发展&#xff0c;AI助手正逐渐成为我们生活和工作中不可或缺的伙伴。轻易云AI助理&#xff0c;作为这一领域的佼佼者&#xff0c;以其无所不知、无所不能的AI创作模型&#xff0c;为用户带来了前所未有的智能体验。 一、AI创作模型的丰富性 在轻易云AI助…

CG-85D 振弦式渗压计厂家 测量孔隙水压力或液位

产品概述 振弦式渗压计适合埋设在水工建筑物和基岩内&#xff0c;或安装在测压管、钻孔、堤坝、管道或压力容器中&#xff0c;以测量孔隙水压力或液位。主要部件均采用特殊钢材制造&#xff0c;适合在各种恶劣环境中使用。特殊的稳定补偿技术使传感器具有极小的温度补偿系数。…