今天做的题目,我用关系闭包实现了,别人用的并查集,我又尝试了一下。
并查集就是把森林按某种关系合并即定义;
并查集的算法:
1,初始化森林,每棵树都只有一个点;
2,将有关系的点所在的树合并:如果两个树的名字相同就放回,因为已经是在一个树下了,如果不相同就把名字大的树的名字改成小的,(用数组表示树forast[顶点]==顶点所在的树此阶段在for循环中完成);
时间复杂度应该是O(m*n);
例题(http://acm.hdu.edu.cn/showproblem.php?pid=1213)
#include<stdio.h>
int forast[1001];
int t,n,m;
int mytree(int point)//找顶点所在的树
{
return forast[point];
}
void merge(int a,int b)//合并
{
int temp,i,mintr,maxtr;
mintr=mytree(a);
maxtr=mytree(b);
if(mintr==maxtr)
return ;
if(mintr>maxtr){
temp=maxtr;
maxtr=mintr;
mintr=temp;
}
for(i=1;i<=n;i++)//将maxtr森林归并到mintr森林中,就是将两树合并(一个点一个点的合并)
if(maxtr==mytree(i))//如果i点的树==maxtr树就将他加入mintr中
forast[i]=mintr;
}
main()
{
int i,a,b,sum;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)////初始化森林,每个点各成树
forast[i]=i;
for(i=0;i<m;i++){
scanf("%d%d",&a,&b);
merge(a,b);//////合并a,b
}
sum=0;
for(i=1;i<=n;i++)
if(i==mytree(i))//数树的个数
sum++;
printf("%d/n",sum);
}
return 0;
}
分享到:
相关推荐
并查集是一种用于处理一些不交集的合并及查询问题的数据结构,在算法竞赛以及实际问题求解中有着广泛的应用。并查集的核心功能包括:创建集合(make_set)、查找元素所在集合(find_set)、合并两个集合(union_set...
并查集是一种在图论和算法设计中常用的离散数学结构,主要用于处理一些不相交集合的合并与查询问题。这个压缩包文件“团伙数据”显然包含了一些与并查集算法相关的练习数据和可能的题解,目的是帮助学习者更好地理解...
并查集(Union-Find Set)是一种用于管理分组的数据结构,它具备两个操作:(1) 查询元素a和元素b是否为同一组 (2) 将元素a和b合并为同一组。并查集的实现使用树形结构,使用树形结构来表示以后,每一组都对应一棵树...
### 并查集模版详解 #### 一、并查集简介 并查集是一种用于处理元素集合的动态数据结构,常被应用于图论、计算机网络、数据挖掘等领域。其核心功能是支持两种操作:合并两个集合(并操作)与查询某个元素所属的...
并查集是一种在分散的数据元素中寻找连接关系的数据结构,常用于处理一些不相交集合的合并与查询问题。在图论中,它可以帮助我们快速判断两个节点是否属于同一个连通分量,或者将两个连通分量合并。在本教程中,我们...
总结来说,经典并查集是一种高效的数据结构,适用于处理集合合并与查询问题。通过路径压缩和按秩合并等优化手段,可以在保持集合不相交性的前提下,提供高效的查找和合并操作,尤其在处理图论、网络流、社交网络等...
### 并查集C/C++代码实现 #### 知识点概述 并查集是一种用于处理元素集合的动态集合问题的数据结构,它支持两种基本的操作:**并**和**查**。并查集的主要用途是判断一个元素是否属于某个集合,并且能够有效地将两...
并查集是一种在图论和算法设计中常用的离散数据结构,主要应用于处理不相交集合的联合与查询问题。在ACM(国际大学生程序设计竞赛)中,它经常被用来解决各种组合优化和图论问题。下面我们将深入探讨并查集的核心...
### 并查集算法思想详解 #### 一、并查集基本概念 并查集是一种数据结构,主要用于处理一些不交集的合并及查询问题,它支持两种操作: 1. **合并**(Union):将两个不同的集合合并成一个集合。 2. **查找**...
### C++ 实现并查集 #### 概述 并查集是一种树形的数据结构,常用于处理一些不交集的合并及查询问题,可以高效地进行集合的合并与查找操作。本文将介绍如何用C++语言实现一个简单的并查集,并通过具体的代码示例来...
总结,本篇精讲介绍了并查集这一数据结构的基本概念、核心算法以及Java实现,并通过两个实例展示了其在实际问题中的应用。并查集是解决离散集合操作的有效工具,尤其在处理大量查询和合并操作时,其高效性能使其成为...
总结来说,並查集是一种高效的数据结构,用于处理集合的合并与查询问题,它的核心操作包括查找和合并,并通过路径压缩和按秩合并等策略来优化性能。在实际应用中,並查集能很好地解决许多无向图的连通性问题。
总结起来,通过并查集这一数据结构,我们可以有效地处理集合的合并与查询,特别是在需要高效处理动态集合分组的问题中,如《银河英雄传说》中的战舰队列管理。并查集的优化技巧,如启发式合并和路径压缩,使得其在...
### 并查集在信息学竞赛中的拓展应用详解 #### 一、并查集简介及其在信息学竞赛中的角色 并查集(Disjoint Set Union, DSU)是一种用于处理一些不交集的合并及查询问题的数据结构。它主要用于解决元素集合的划分...
总结来说,本文详细介绍了并查集的基本概念、操作以及路径压缩这一优化策略,并结合给定的标题和描述推测了可能的编程题目类型。在实际应用中,理解并熟练掌握并查集及其优化方法对于解决涉及集合关系的问题至关重要...
根据给定的信息,本文将详细解释“POJ 1988 简单并查集”中的核心知识点,包括并查集的基本概念、代码实现以及在本题中的具体应用。 ### 并查集基本概念 并查集是一种用于处理一些不交集的合并及查询问题的数据...
并查集(Union-Find)是一种用于处理连接关系的数据结构...总结来说,理解并查集的关键在于掌握查找和合并操作的实现以及优化策略。在实际问题中,合理运用并查集能够有效解决涉及集合连接的问题,提高算法的运行效率。