洛谷U640030 删除一个点 题解 割点/点双连通分量

news/2025/12/10 2:40:21/文章来源:https://www.cnblogs.com/quanjun/p/19328887

题目链接:https://www.luogu.com.cn/problem/U640030

题目大意:

给你一个 \(n\) 个顶点 \(m\) 条边的无向图。顶点编号从 \(1\)\(n\)

请你求出该图删除一个点之后,连通块最多有多少。

解题思路:

首先,有两个比较容易被坑到的地方。

坑1:

虽然题目说不会存在重边,但是题目中可能会存在自环。而自环对答案没有影响,所以我们可以忽略掉所有的自环。

坑2:

如果一个连通块的大小为 \(1\)(即连通块中只有一个点),则删掉这个点,连通块的数量会减少 \(1\)

我们肯定不希望删掉这样的点。但是如果题目中全都是这样的点,我们就不得不删除一个,使得连通块的个数为 \(n-1\)

这种情况何时出现呢?就是在忽略掉自环后,图中的边数为 \(0\) 时,此时每个点都是一个连通块,答案为 \(n-1\)。因为你必须要删除掉一个点。


接着我们考虑每一个大小 \(\gt 1\) 的连通块,对于这样的连通块:

  • 如果删除的是非割点,则连通块数量没有增加;
  • 如果删除割点 \(u\),如果割点 \(u\) 同时处于 \(k\) 个点双连通分量重,则这 \(1\) 个连通块在删掉这个割点后会变成 \(k-1\) 个连通块,连通块数量增加 \(k-1\) 个。

所以,我们可以求出 \(mx\)\(mx\) 表示所有割点中处在点双连通分量中最多的那个割点对应的点双连通分量数。

答案为 \(cnt + mx - 1\)

其中,\(cnt\) 表示一开始的连通块数。

注:如果不存在割点,但存在大小大于 \(1\) 的连通块,则答案为 \(cnt\)

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 5;vector<int> g[maxn];
int n, m, dfn[maxn], low[maxn], ts, cnt, mx, rt;void init() {for (int i = 1; i <= n; i++) {g[i].clear();dfn[i] = low[i] = 0;}ts = cnt = mx = 0;
}void tarjan(int u, int p) {dfn[u] = low[u] = ++ts;int son_cnt = 0;for (auto v : g[u]) {if (v == p) continue;if (!dfn[v]) {tarjan(v, u);low[u] = min(low[u], low[v]);if (low[v] >= dfn[u])son_cnt++;}else low[u] = min(low[u], dfn[v]);}if (son_cnt >= 2 || u != rt && son_cnt == 1) {mx = max(mx, son_cnt + (u != rt));}
}int main() {while (~scanf("%d%d", &n, &m) && n) {init();int mm = 0;for (int i = 0, u, v; i < m; i++) {scanf("%d%d", &u, &v);if (u == v) continue;mm++;g[u].push_back(v);g[v].push_back(u);}if (mm == 0) {printf("%d\n", n - 1);continue;}bool flag = false;for (int i = 1; i <= n; i++) {if (!dfn[i]) {if (g[i].size() == 0)flag = true;cnt++, rt = i, tarjan(i, -1);}}int ans = cnt + max(0, mx - 1);printf("%d\n", ans);}return 0;
}

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

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

相关文章

终端 MQTT 通信开发规范

终端 MQTT 通信开发规范 一、概述 本文档整合终端与服务端 MQTT 通信全流程规范,涵盖连接配置、认证注册、主题格式、数据上报、指令交互等核心模块,为终端开发提供标准化、可落地的操作指南,确保通信兼容性与安全性…

UEFI 中的杂项知识总结-Protocol Handle 机制的详细介绍 - 阿源

本文介绍了在 UEFI 学习过程中遇到的一些知识集合。总结如下:复位向量ResetVector;不同平台的OS loader/GRUB;UEFI中的ESP目录是什么;以及UEFI中很重要的Protocol Handle机制,非常类似于Linux设备驱动和应用的设计…

状态模式

状态模式:封装状态变化的行为设计艺术 一、状态模式的定义与核心思想 状态模式(State Pattern) 是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其核心思想是 …

每日3题 4(咕咕咕

孩子们事情太多了明天再说

基于事件驱动机制的提醒系统设计方案

基于事件驱动机制的提醒系统设计方案一、系统架构设计 采用 "分层架构 + 事件驱动引擎" 模式,各层级职责与技术选型如下:层级核心职责技术选型前端层用户交互(增删改查提醒)、实时接收提醒、处理确认操作…

docker快速上手

docker快速上手 安装配置# 移除旧版本 sudo dnf remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 配置yum源 sudo …

全球首个液冷迷你机!abee AI Station 395 Max工作站图赏

全球首个液冷迷你机!abee AI Station 395 Max工作站图赏Posted on 2025-12-10 01:22 lzhdim 阅读(0) 评论(0) 收藏 举报日前,abee AI Station 395 Max迷你液冷AI工作站发布,定价为17999元。 现在这款新品已经来…

Docker环境下Redis ACL实战踩坑记:权限、挂载与用户配置解析

Docker环境下Redis ACL实战踩坑指南:权限、挂载与用户配置解析 开篇:实战场景说明 最近在生产环境中部署Redis时,我们决定升级到Redis 7.0并启用ACL功能,以实现更精细化的权限控制。核心需求很简单:启用ACL功能,…

一例罗技M275鼠标空键程处理

笔者手中有一个罗技M275鼠标,最近发现鼠标空键程现象比较严重,不如手中另一只M215鼠标手感清脆、爽利。因此笔者尝试解决手中鼠标的空键程现象。 首先根据网络上已经提出的解决办法,打开鼠标,在鼠标左键和微动的接…

Alientech KESS V3: Master Bench-Boot Protocols Activation for Agri Trucks Buses

Overcoming Agriculture Truck & Bus Diagnostic Challenges: The Alientech KESS V3 KESS3 Master Solution In the world of agriculture truck and bus maintenance, downtime is a costly enemy. For European…

洛谷U640022 找割点 题解 点双连通分量

题目链接:https://www.luogu.com.cn/problem/U640022根节点要分割出至少 \(2\) 个连通块(因为根节点没有父节点那部分的连通块)。 其它节点只需要分割出至少 \(1\) 个连通块即可。对于一个 当前节点 \(u\),dfs 它的…

Alientech KESS V3 Master OBD Protocol Activation: Bike, ATV, UTV – Boost Repair Diagnostics

Mastering Protocol Activation for Bikes, ATVs, and UTVs: The Alientech KESS V3 Advantage Problem: Activation Challenges with Specialized Vehicles For European and American automotive professionals and …

第50天(中等题 数据结构)

打卡第五十天 2道中等题题目:思路:代码: class Solution { public:int numOfSubarrays(vector<int>& arr) {const int MODULO = 1000000007; int odd = 0, even = 1; // odd: 奇数前缀数量,ev…

Alientech KESS3 Master: Efficient OBD Protocols Activation for Agri Trucks Buses

Diagnosing the Challenges of Agricultural, Truck, and Bus Diagnostics For automotive professionals and owners working with agriculture, trucks, and buses, traditional diagnostic tools often fall short.…

内网环境-centos7.6配置chrom和flask项目

1.离线安装Anaconda, 配置python环境 #ip网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33Linux安装Anaconda教程 2.离线安装chrome 2.1离线安装命令#使用 rpm命令强制安装 --nodeps选项会跳过依赖检查 r…

selenium其他重要的Api

元素等待方法 认识等待 由于⽹络或其他原因,元素未能及时加载出来,⽽代码已执⾏,会触发异常,故要设置等待。代码执⾏过程中,第⼀次未找到元素,先不抛出异常。激活等待时间,在等待过程中如果找到元素就执⾏。 隐…

洛谷P2860 [USACO06JAN] Redundant Paths G 题解 边双连通分量

题目链接:https://www.luogu.com.cn/problem/P2860 解题思路: 双连通分量缩点,设缩点后有 \(cnt\) 个度数为 \(1\) 的点。 则答案为 \(\lceil \frac{cnt}{2} \rceil\)(即 (cnt + 1) / 2)。 示例程序: #include &…

AI真好玩系列-免费解锁 Google Gemini 的几种方式

@目录🏢 1. Gemini Enterprise (企业版)💎 2. Google AI Studio (隐藏宝藏)🤖 3. Google Gemini (个人版)Conclusion | 结语 宝子们来啦!👋 听说你想体验 Google 最强的 AI,这里有一份超简单的「免费试用」攻…

# sg.计算器

# sg.计算器import PySimpleGUI as sg progress = sg.ProgressBar(100) num1_inp = sg.Input(size=5) num2_inp = sg.Input(size=5) result_txt = sg.Text() add_btn = sg.Button(add)layout=[[num1_inp,num2_inp,resu…

智能猫砂盆方案商权威推荐:技术驱动宠物养护新体验 - 星报

清晨的阳光透过窗帘洒进客厅,你手机收到一条推送:“猫咪今晨排泄物pH值正常,但饮水次数比平日减少15%”,在猫咪表现出任何不适症状前,健康预警已经悄然启动。 随着“它经济”的蓬勃发展,全球宠物产业预计到2030年…