本题也是个标准的并查集题解。

操作完并查集之后,就是要找和0节点在同一个集合的元素有多少。

注意这个操作,须要先找到0的父母节点。然后查找有多少个节点的额父母节点和0的父母节点同样。

这个时候须要对每一个节点使用find parent操作。由于最后状态的时候,节点的parent不一定是本集合的根节点。

#include <stdio.h>

const int MAX_N = 30001;
struct SubSet
{
int p, rank;
}sub[MAX_N]; int N, M; void initSub()
{
for (int i = 0; i < N; i++)
{
sub[i].p = i;
sub[i].rank = 0;
}
} int find(int x)
{
if (x != sub[x].p) sub[x].p = find(sub[x].p);
return sub[x].p;
} void unionTwo(int x, int y)
{
int xroot = find(x);
int yroot = find(y);
if (sub[xroot].rank < sub[yroot].rank) sub[xroot].p = yroot;
else
{
if (sub[xroot].rank == sub[yroot].rank) sub[xroot].rank++;
sub[yroot].p = xroot;
}
} int main()
{
int a, b, k;
while (scanf("%d %d", &N, &M) && (N || M))
{
initSub();
for (int i = 0; i < M; i++)
{
scanf("%d", &k);
if (k > 0) scanf("%d", &a);
for (int j = 1; j < k; j++)
{
scanf("%d", &b);
unionTwo(a, b);
}
}
int sus = 1, p = find(0);
for (int i = 1; i < N; i++)
{
if (find(i) == p) sus++;
}
printf("%d\n", sus);
}
return 0;
}

最新文章

  1. 原创 C++作用域 (二)
  2. java的poi技术读取Excel[2003-2007,2010]
  3. HandlerThread源码分析
  4. Python 性能优化——对象绑定
  5. Visual Studio将Delop之后生成的dll或者wsp复制到指定目录
  6. iOS开发UI篇—iOS开发中三种简单的动画设置
  7. AFNetworking、MKNetworkKit和ASIHTTPRequest对比
  8. windows phone 8 开发系列(三)程序清单说明与配置
  9. 开启一个指定action的Activity
  10. 【机器学习实验】学习Python来分类现实世界的数据
  11. JavaScript学习日志(二):面向对象的程序设计
  12. Python爬虫实践 -- 记录我的第二只爬虫
  13. jquery中文档处理的总结
  14. JS模块化工具require.js教程(一):初识require.js
  15. spring+shiro共享session完整小例子
  16. 把Catalina的字符串格式转化为日期格式
  17. mysql 5.6 每天凌晨12:00 重置sequence表中的某个值
  18. IIS隐藏版本号教程(Windows Server 2003)
  19. select * from dim.dim_area_no@to_dw
  20. Python3高级用法综合举例

热门文章

  1. 【mysql】 mysql 子查询、联合查询、模糊查询、排序、聚合函数、分组----------语法
  2. 学习爬虫:《Python网络数据采集》中英文PDF+代码
  3. 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
  4. 基于Core Text实现的TXT电子书阅读器
  5. Qt之QStackedLayout
  6. ios的notification机制是同步的还是异步的
  7. java 经常使用測试框架
  8. RvmTranslator7.1
  9. 2014 Unity3d大会的部分总结
  10. jsoncpp-src-0.5.0.tar.gz 源码错误!!!!