点双连通分量例题:矿场搭建

news/2025/10/5 22:17:00/文章来源:https://www.cnblogs.com/-114514/p/19127111

洛谷P3225 矿场搭建

据说点双连通分量的题少,而矿场搭建就是其中的一道好题,老师简单讲了一下我也是套板子AC了
题面具体点链接看,大概就是要求在无向图上修最少的救援点使得任意一个点坍塌了之后,剩下的点都能走走到一个救援点;

看到点断我也是第一时间想到割点,因为显然如果坍塌的点是一个割点,就能把图分成几个点双连通分量,这时需要的救援点显然是最多的;
想到这里我就直接套了点双连通分量的板子,每一个连通分量修一个救援点,方案数则是每个连通分量结点数的乘积,写完一测,哎呀样例都过不了好尴尬;

然后老师指点了一下才知道是要根据每个连通分量中的割点数不同来分不同情况讨论(其实应该自己多画几个图的,应该能自己想出来的);

其实这个性质是很明显的,比如考虑下面这个图:
无标题1
如图所示,红,蓝,绿三个部分分别是三个点双连通分量,M,N是两个割点;
现在我们注意蓝色部分的这个连通分量,显然无论是M点坍塌还是N点坍塌,蓝色点都能通过另外一个割点跑到另外一个连通分量去,所以它是不用建救援点的;更形式化的说:当一个连通分量中有两个及以上割点时,这个连通分量是不用建救援点的,它对答案没有任何贡献

那么对于红色和绿色部分呢?它们只有一个割点,如果刚好是这个割点坍塌了红色点就将无处可去,所以必须在其中设置
一个救援点才行;能在哪些点设置呢?显然除了割点的点都可以;也就是说:当一个有n个结点的连通分量中只有一个割点时,救援点数会增加一个,且有n-1种设置方法(除去那个割点都可以设置)

最后我们还要考虑一种割点数为零的情况,显然这种情况是要建的,毕竟它没有割点,也就是说不能到其他连通分量的救援点去;那么建多少个呢?一个明显是不够的,万一刚好这个点坍塌呢?所以要建两个,而且可以任意选两个点建;也就是说:对于有n个结点且没有割点的连通分量,要建2个救援点,且有\(n\times(n-1)\div2\)种方案)(组合数化简可得)

另外要注意方案数要相乘(乘法原理)
以下就是ac代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 505;
int n, S, t, cnt, tot, ans, maxn, dfn[N], low[N], g[N]; //cnt记录dfs序,tot统计是第几组数据,maxn记录结点数
vector<int> mp[N], mp2[N];
vector<int> s; //用来维护的栈
void dfs(int u, int f){ //点双和割点的模板if(u == f && mp[u].empty()) { //特判孤点++ans;mp2[ans].push_back(u);return ;}dfn[u] = low[u] = ++cnt; //记录dfs序并初始化lows.push_back(u);for(auto v : mp[u]){if(v == f) continue;if(!dfn[v]){dfs(v, u);low[u] = min(low[u], low[v]);if(low[v] >= dfn[u]){ //如果是一个点双连通分量 ++ans;g[u]++; //u就是一个割点while(1){ //记录这个分量的点int x = s.back(); s.pop_back();mp2[ans].push_back(x);if(x == v) break; }mp2[ans].push_back(u); //把割点也放进去}}else low[u] = min(low[u], dfn[v]);}
}
signed main(){while(1){memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(g,0,sizeof(g));	ans = 0; cnt = 0; maxn = 0; //多测不清空,_______;tot++;cin >> n;if(n == 0) break;for(int i = 1; i <= n; i++){cin >> S >> t;if(S == t) continue;maxn=max(maxn, max(S, t)); //记录最大结点(题目不给)mp[S].push_back(t);mp[t].push_back(S);}for(int i = 1; i <= maxn; i++){if(dfn[i]) continue;dfs(i, i);g[i]--;}int ans1 = 0, ans2 = 1;for(int i = 1; i <= ans; i++){int num = 0;for(auto x : mp2[i]) if(g[x] > 0) num++; //统计割点数if(num >= 2) continue; //如果有两个及以上割点就不会对答案有贡献,直接跳过else if(num == 0){ //没有割点ans1 += 2; //新增两个救援点if(mp2[i].size() != 1) ans2 *= (mp2[i].size()*(mp2[i].size()-1))/2; //方案数}else if(num == 1){ //一个割点ans1 += 1; //救援点 + 1if(mp2[i].size() != 1) ans2 *= (mp2[i].size()-1); //可建在除割点外的任意一个点}} cout << "Case " << tot << ": " << ans1 << " " << ans2 << endl;for(int i = 1; i <= n; i++) mp[i].clear();for(int i = 1; i <= ans; i++) mp2[i].clear(); //清空}
}

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

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

相关文章

MTK oppoR9m Smart Phone flash Tool 提示 ERROR: STATUS_UNSUPPORT_CTRL_CODE (0xC0010004)

前言全局说明在使用 SP flash tool 刷机时,提示 ERROR: STATUS_UNSUPPORT_CTRL_CODE (0xC0010004)错误注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢失用户:照…

我开发的 Chrome 插件 SEO Tools Extension 今天上线了

我开发的 Chrome 插件 SEO Tools Extension 今天上线了 10月3日晚上向 Chrome 应用商店提交的浏览器扩展 SEO Tools Extension 今天下午通过审核并上线了。这个插件就是一些常用的 SEO工具集合,帮助站长做好网站SEO优…

Windows Server部署Vue3+Spring Boot项目 - 实践

Windows Server部署Vue3+Spring Boot项目 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

WPF ContentControl Content Binding

Install-Package Microsoft.Extensions.DependencyInjection; Install-Package CommunityToolkit.mvvm; <Window x:Class="WpfApp25.Views.MainWin"xmlns="http://schemas.microsoft.com/winfx/2006…

做网站什么程序好东莞互联网公司排名

ArcGIS Pro SDK &#xff08;九&#xff09;几何 3 点 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 3 点1 构造地图点2 地图点生成器属性3 地图点的相等性4 缩放至指定点 环境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 构造地图点 // 使用生…

南京专业做网站公司地址查公司信息在哪里查

分布式架构中实现全局唯一ID的需求非常常见,业界上也有很多的工具可直接使用。以下总结一下在面试过程中被问到如何使用Redis 实现分布式全局唯一ID的问题 自定义全局唯一ID生成器 @Component public class RedisIdWorker {/*** 开始时间戳*/private static final long BEGIN…

男女生做恶心的网站网站后期维护管理

本帖最后由 神经病的春天 于 2014-9-18 15:36 编辑近来升级了一下主机&#xff0c;这样一来&#xff0c;终于能够拥有USB3.0和SATA3.0接口了&#xff0c;不过本人目前还木有SSD&#xff0c;所以尚无法完全发挥出这些接口的速度优势。 为了测试&#xff0c;上周的时候&#xff0…

学校网站建设责任书衡阳seo网站推广

1. DBoW3库介绍 DBoW3是DBoW2的增强版&#xff0c;这是一个开源的C库&#xff0c;用于给图像特征排序&#xff0c;并将图像转化成视觉词袋表示。它采用层级树状结构将相近的图像特征在物理存储上聚集在一起&#xff0c;创建一个视觉词典。DBoW3还生成一个图像数据库&#xff0c…

To PXS -- Words to be remembered 2025.10.5

To PXS Despite the great distance between us, our hearts still unite as one. The powerful bond of friendship between us will never fade but endure. Looking back at the days and nights we shared togethe…

网站截图怎么做做网站要收订金吗

为了精准、稳定地提取滚动轴承故障特征&#xff0c;提出了基于变分模态分解和奇异值分解的特征提取方法&#xff0c;采用标准模糊C均值聚类(fuzzy C means clustering, FCM)进行故障识 别。对同一负荷下的已知故障信号进行变分模态分解&#xff0c;利用 奇异值分解技术进一步提…

⭐ Unity AVProVideo插件自带播放器 脚本重构 实现视频激活重置功能 - 实践

⭐ Unity AVProVideo插件自带播放器 脚本重构 实现视频激活重置功能 - 实践2025-10-05 21:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x:…

dede网站打开慢做采集网站赚钱

旧项目用的 vue3-seamless-scroll 怎么写都不生效&#xff0c;一看源码两年没更新了&#xff0c;不想调试&#xff0c;还是自己写吧&#xff0c;再不济问问GPT都会更快一点 scroll.vue <template><div class"scroll-container" ref"scrollContainerR…

网站做视频的软件营销型网站哪家好

课程背景 2023年&#xff0c;以ChatGPT为代表的接近人类水平的对话机器人&#xff0c;AIGC不断刷爆网络&#xff0c;其强大的内容生成能力给人们带来了巨大的震撼。学术界和产业界也都形成共识&#xff1a;AIGC绝非昙花一现&#xff0c;其底层技术和产业生态已经形成了新的格局…

做损坏文档的网站seo搜索引擎推广

更新Milvus各个组件的配置参数。 调试 您可以在OpenAPI Explorer中直接运行该接口&#xff0c;免去您计算签名的困扰。运行成功后&#xff0c;OpenAPI Explorer可以自动生成SDK代码示例。 ​编辑调试 授权信息 下表是API对应的授权信息&#xff0c;可以在RAM权限策略语句的…

做网站怎么选服务器军队采购网

java中各map中是否可以存储null值情况

linux做网站服务器吗中企动力官网网站

‍ 侯建业 本文由是石科技CIO侯建业撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 是石科技&#xff08;江苏&#xff09;有限公司成立于2021年&#xff0c;由国家超级计算无锡中心与…

nodejs做网站的弊端网站备案中是什么意思

Title: 非线性最小二乘问题的数值方法 —— 从高斯-牛顿法到列文伯格-马夸尔特法 (I) 文章目录 前言I. 从高斯-牛顿法II. 到阻尼高斯-牛顿法III. 再到列文伯格-马夸尔特法1. 列文伯格-马夸尔特法的由来2. 列文伯格-马夸尔特法的说明说明一. 迭代方向说明二. 近似于带权重的梯度…

保险业网站建设想卖产品怎么推广宣传

要使用Python批量根据Excel数据绘制饼状图&#xff0c;可以使用pandas和matplotlib库来实现。以下是一个基本的代码示例&#xff1a; import pandas as pd import matplotlib.pyplot as plt # 读取Excel文件 data pd.read_excel(data.xlsx) # 提取需要用于绘制饼状图的数据列…

网站建设与服务技能实训心得体会采集网站如何收录

一、可继承的属性 1. 文本相关属性 color&#xff1a;文本的颜色。 font-family&#xff1a;字体系列。 font-size&#xff1a;文本的大小。 font-style&#xff1a;文本的样式。 line-height&#xff1a;行与行之间的垂直间距。 2. 列表相关属性 list-style-type&#xff1a;…

uboot 2020版本下gpio命令的使用

1.在uboot命令行中想要支持gpio的命令,需要打开如下宏CONFIG_CMD_GPIO=y2.选用gpio引脚,作为测试引脚 2.1 查看电路原理图,选用那种soc不和mcu连接的pin,这样可以避免mcu的干扰。 2.2 查看pinmux的配置文件pinmux.…