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

并查集 - # HDU 2473 Junk-Mail Filter

题目大意

给定编号从 0N-1 的 N 个点,以及 M 条操作。有两种操作:

  1. M a b:合并 a 和 b 所在的集合(关系具有传递性)。
  2. S a:将点 a 从它当前所在的集合中删除,使其成为一个独立的孤立点。

最后需要输出整个操作结束后,一共有多少个不同的集合。

解题思路:虚拟节点法

这是一道经典的并查集变种问题——带删除操作的并查集
难点在于:并查集并不支持直接删除一个节点,因为删除某个节点可能会影响其子节点的指向。

为了解决这个问题,这里引入“虚拟节点”(“虚父节点”)的技巧。

删除过程图解

1

图1: 无法删除 A节点
图2: 引入虚拟节点后,删除节点A的方法。

代码实现 (C++)

```cpp
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;        // 最大原始节点数
const int MAXM = 1000005;       // 最大操作数
const int MAX_SIZE = MAXN + MAXN + MAXM;  // 并查集数组总大小int n, m;                       // n:当前节点数, m:当前操作数
int Fa[MAX_SIZE];                // 并查集父节点数组
int flg[MAX_SIZE];               // 标记数组,用于最后统计集合个数int GetFa(int k) {if (k == Fa[k]) return k;                    // 自己是根,直接返回return Fa[k] = GetFa(Fa[k]);                   // 路径压缩:将父节点直接指向根
}
void Merge(int x, int y) {int fx = GetFa(x);int fy = GetFa(y);if (fx != fy)  Fa[fx] = fy;
}int main() {for (int k = 1;; k++) {cin >> n >> m;if (n == 0 && m == 0) break;char ch;                                     // 操作类型:M或Sint a, b;                                     // 操作参数/*** 初始化阶段:* 为每个原始节点创建一个虚拟节点(马甲)* 原始节点编号:1 ~ n* 初始虚拟节点编号:n+1 ~ n+n* 预留空间:n+n+1 ~ n+n+m 用于删除操作*/// 步骤1:原始节点指向初始虚拟节点// 例如:Fa[1] = 1+n, Fa[2] = 2+n, ...for (int i = 1; i <= n; i++)  Fa[i] = i + n;// 步骤2:初始化所有虚拟节点(包括初始虚拟节点和预留空间)// 虚拟节点指向自己,作为集合的根for (int i = n + 1; i <= n + n + m; i++)  Fa[i] = i;int L = n + n;                                 // 当前可用的新虚拟节点编号for (int i = 1; i <= m; i++) {scanf(" %c", &ch); if (ch == 'M') {                            // 合并操作scanf("%d%d", &a, &b);Merge(a + 1, b + 1);}if (ch == 'S') {                            // 删除操作cin >> a;L++;                                     // 获取一个新的虚拟节点编号Fa[a + 1] = L;                         // 这样a就脱离了原来的集合,成为一个独立的点// 注意:虚拟节点L已经在初始化时指向自己,所以不需要额外设置}}memset(flg, 0, sizeof(flg)); int cnt = 0; for (int i = 1; i <= n; i++) {int x = GetFa(i);if  (!flg[x]) cnt++ ,flg[x] = 1;}cout << "Case #" << k << ": " << cnt << endl;}return 0;
}
http://www.jsqmd.com/news/392592/

相关文章:

  • 2025碳酸镁市场盘点:国外实力厂家表现抢眼,专业的碳酸镁推荐博仕佶镁市场认可度高 - 品牌推荐师
  • 液氮速冻机选购指南:2026年口碑佳的几款机型,二氧化碳/液氩/液氮速冻机/真空管/制氧机,液氮速冻机公司推荐排行榜单 - 品牌推荐师
  • 聚焦专利改写:2026年值得关注的AI校准解决方案,智能专利分析/专利改写升级/发明专利代理,专利改写助手口碑推荐 - 品牌推荐师
  • 微信小程序Python驾考小助手驾校
  • 构建未来教育新生态:智慧校园综合管理平台方案关键模块建设浅析
  • 2026新型航空应急撤离舱实力厂家怎么挑?给你支招,撤离舱排名忠军装备引领行业标杆 - 品牌推荐师
  • 人也是靠上下文做决策的
  • 集体好奇心推动团队的创新成果
  • Microsoft SQL Server 2025 RTM CU2 (2026 年 2 月累计更新)
  • 简单表述pmos和nmos
  • DOM 总结
  • 从产能到品控:2026年树脂制造商特点分析,帘式MBR膜/陶氏树脂/工业废气处理设备/三菱MBR膜,树脂品牌哪家强 - 品牌推荐师
  • JavaScript 字符串深入解析
  • 寻找高品质链条?国内不锈钢链条优质供应商解析,鳞板输送机/乙型网带/链板提升机/金属链板/烘干机网带,链条厂家哪家靠谱 - 品牌推荐师
  • 2026首月,威孚口碑佳的涡轮增压器组件推荐来啦,福康增压器/霍尔赛特增压器,涡轮增压器批发怎么选择 - 品牌推荐师
  • 挑选S系列减速机工厂:2026年需关注的几大要点,立式齿轮减速机/替代摆线减速机,S系列减速机生产商推荐榜 - 品牌推荐师
  • 选购必看:2026年高密度硅酸钙异形件实力厂家一览,汽车后视镜热弯模具/玻璃热弯模具,高密度硅酸钙异形件品牌排行 - 品牌推荐师
  • 2026国内可靠炎症因子试剂盒企业排行值得关注,his elisa试剂盒,炎症因子试剂盒供应商推荐榜单 - 品牌推荐师
  • 企业虚拟展厅智能运维:AI架构师的故障预测与自愈系统设计
  • Power BI实战:如何高效处理百万级大数据集
  • AI原生应用领域安全防护面临的新问题与应对
  • 大数据架构中的数据血缘追踪技术解析
  • Linux文件系统层级结构 - Invinc
  • 详细介绍:Django REST framework实现安全鉴权机制
  • Vue.js 自定义指令详解
  • NumPy 线性代数
  • HTML URL 编码
  • 《Foundation 进度条》
  • Kotlin 委托(Delegation)
  • 长上下文记忆的舒适陷阱:为什么更多记忆不等于更可靠