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

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

题目链接: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.zskr.cn/news/80202.html

相关文章:

  • 状态模式
  • 基于事件驱动机制的提醒系统设计方案
  • 全球首个液冷迷你机!abee AI Station 395 Max工作站图赏
  • 一例罗技M275鼠标空键程处理
  • Alientech KESS V3 Master OBD Protocol Activation: Bike, ATV, UTV – Boost Repair Diagnostics
  • 机器学习基础
  • 智能猫砂盆方案商权威推荐:技术驱动宠物养护新体验 - 星报
  • 网络线序问题了解
  • 洛谷U640024 找割边 题解
  • Python 学习笔记(01)
  • Python Flask service provide data list and retrieve and display in chrome via html and javascript
  • 图文并茂-手把手教宝子们3分钟用 GitHub Pages 搭建免费网站 (保姆级教程)
  • 2025年电壁炉解决方案商综合推荐:驱动智能取暖与美学融合的新浪潮 - 星报
  • 黑马程序员SpringCloud微服务开发与实战-微服务-配置管理
  • git-ssh - yebinghuai-qq
  • Linux中级のNginx~2
  • 2025 最新水性地坪漆厂家 TOP5推荐!水性地坪漆年度品牌榜,环保性能 + 技术创新优质供应商,专业赋能地面涂装新体验 - 全局中转站
  • 2025 最新路面胶粘剂厂家 TOP5 评测!路面胶粘剂优质国产品牌年度榜单,绿色环保 + 性能实证权威榜单发布,技术赋能重构路面工程生态 - 全局中转站
  • 2025年国内十大检定器生产厂家实力排行榜,贯入式砂浆强度检测仪/回弹仪检定器/裂缝测深仪/裂缝测宽仪/数显碳化深度尺检定器供应厂家找哪家 - 品牌推荐师
  • 2025年权威推荐!水处理设备企业综合实力TOP4 - 极欧测评
  • 2025年最新盘点:本地最值得信赖的检定器供应商,高强回弹仪检定器/钢砧/云回弹仪/高强回弹仪/涂层测厚仪/楼板测厚仪检定器生产厂家电话 - 品牌推荐师
  • 东方智慧的现代生成:论岐金兰AI元人文构想的思想本源、理论建构与文明意义
  • centos7安装docker
  • US$1209.35 Original Alientech KESS V3 KESS3 Master 12MonthsSubscription
  • JVM内存与GC机制全景深度剖析:从对象诞生到垃圾回收的完整生命周期
  • 2025 最新桥梁防腐涂料厂家 TOP5推荐!绿色防腐 + 工程实证权威榜单发布,技术赋能守护基建安全 - 全局中转站
  • 网络安全编程——基于Python达成的SSH通信(Windows执行)
  • 深入解析:2025年11月11日 AI快讯
  • 如果同一个子网中,设备超过255台,那会如何才能保证处于同一子网
  • 需求的变更控制