POJ1611->并查集
2016-07-25 16:59
260 查看
题意:求包含0元素的集合的元素个数
题解:基础并查集
#include <stdio.h>
#include <iostream>
using namespace std ;
#define MAX 30005
int parent[MAX] ;
int rank[MAX] ;
int num[MAX] ;
void make_set(int x)
{
parent[x] = x ;
rank[x] = 0 ;
num[x] = 1 ;
}
int find_set(int x)//查找x的根节点
{
int r = x , temp ;
while(parent[r] != r) r = parent[r] ;
while(x != r)
{
temp = parent[x] ;
parent[x] = r ;
x = temp ;
}
return x ;
}
void union_set(int x , int y)//合并两个集合
{
x = find_set(x) ;
y = find_set(y) ;
if(x == y) return ;
if(rank[x] > rank[y])
{
parent[y] = x ;
num[x] += num[y] ;
}
else
{
parent[x] = y ;
if(rank[x] == rank[y]) rank[y] ++ ;
num[y] += num[x] ;
}
}
int main()
{
int m , n , t , x , y;
while(scanf("%d%d",&n , &m)!= EOF , m+n)
{
if(m == 0)
{
cout << '1' << endl ;
continue ;
}
for(int i = 0 ; i < n ; i ++) make_set(i) ;
for(int i = 0 ; i < m ; i ++)
{
scanf("%d" , &t) ;
scanf("%d" , &x) ;
for (int j = 1; j < t; ++j)
{
scanf("%d" , &y) ;
union_set(x , y) ;
x = y ;
}
}
x = find_set(0) ;
cout << num[x] << endl ;
}
return 0 ;
}
题解:基础并查集
#include <stdio.h>
#include <iostream>
using namespace std ;
#define MAX 30005
int parent[MAX] ;
int rank[MAX] ;
int num[MAX] ;
void make_set(int x)
{
parent[x] = x ;
rank[x] = 0 ;
num[x] = 1 ;
}
int find_set(int x)//查找x的根节点
{
int r = x , temp ;
while(parent[r] != r) r = parent[r] ;
while(x != r)
{
temp = parent[x] ;
parent[x] = r ;
x = temp ;
}
return x ;
}
void union_set(int x , int y)//合并两个集合
{
x = find_set(x) ;
y = find_set(y) ;
if(x == y) return ;
if(rank[x] > rank[y])
{
parent[y] = x ;
num[x] += num[y] ;
}
else
{
parent[x] = y ;
if(rank[x] == rank[y]) rank[y] ++ ;
num[y] += num[x] ;
}
}
int main()
{
int m , n , t , x , y;
while(scanf("%d%d",&n , &m)!= EOF , m+n)
{
if(m == 0)
{
cout << '1' << endl ;
continue ;
}
for(int i = 0 ; i < n ; i ++) make_set(i) ;
for(int i = 0 ; i < m ; i ++)
{
scanf("%d" , &t) ;
scanf("%d" , &x) ;
for (int j = 1; j < t; ++j)
{
scanf("%d" , &y) ;
union_set(x , y) ;
x = y ;
}
}
x = find_set(0) ;
cout << num[x] << endl ;
}
return 0 ;
}
相关文章推荐
- HDU2579 Dating with girls(2) BFS
- Spring整合activeMq(一):点对点模式
- mybatis框架的进一步封装
- CODIS2.x原理 之 CODIS-HA实现原理
- 使用 Eclipse Memory Analyzer 进行堆转储文件分析
- form onsubmit调用C# MVC Controller
- 转载linux命令大全
- python单元测试unittest实例详解
- oracle 在CMD下登陆并进行用户密码修改
- WebService:解决wsdl2java 报错“wsdl2java不是内部或外部命令 也不是可运行的程序”
- 子网划分 子网聚合
- Qt共享内存实现进程间通信(QSharedMemory)
- 《解忧杂货店》杂感
- Non-rigid Registration of Images with Geometric and Photometric Deformation by Using Local Affine Fo
- 版本控制工具安装与配置
- 滚动数组
- 服务器上死活不执行新增的代码-----你需要清除程序缓存了
- 关于Android使用HttpURLConnection传输含有中文JSON数据的报错、乱码问题
- Android Studio解决Error:moudle not specified
- Linux wget 详细使用