作业1-1.fzu社团统计问题
重要数据结构并查集,用树结构实现
判断两个元素是否属于同一集合,只要看他们所在集合的祖先是否相同即可。
合并两个集合,也是使一个集合的祖先成为另一个集合的祖先
一个人参加一个社团
#include<iostream>
using namespace std;
typedef struct ufset *UFset; //并查集结构体指针
typedef struct ufset
{ //并查集定义
int *parent; //取值为1~N,表示每个人的父节点
int *root; //布尔变量数组,1表示其为根
}UFS;
UFset UFinit(int size)
{ //初始化
int index;
UFset U= new ufset;
U->parent = new int[size+1];
U->root = new int[size+1];
for(index=1;index<=size;index++)
{ //与输入相符,从1开始表示第1个人,依次类推
U->parent[index]=1;
U->root[index]=1; //初始假设每个人一个社团,都为根节点
}
return U;
}