首页 > 其他分享 >POJ1611 (简单并查集)

POJ1611 (简单并查集)

时间:2024-01-29 19:23:21浏览次数:21  
标签:set 嫌疑人 int 查集 height ++ 简单 POJ1611 find

POJ1611 (简单并查集)

描述

严重急性呼吸系统综合症 (SARS) 是一种病因不明的非典型肺炎,于 2003 年 3 月中旬被确认为全球性威胁。为了尽量减少传染给他人,最好的策略是将嫌疑人与其他人分开。
在不传播你的疾病大学(NSYSU),有很多学生团体。同一小组中的学生相互交流频繁,一个学生可能会加入多个小组。为了防止SARS可能的传播,新中山大学收集了所有学生团体的成员名单,并在他们的标准操作程序(SOP)中制定了以下规则。
一旦团体中的一个成员成为嫌疑人,则该团体中的所有成员都成为嫌疑人。
然而,他们发现,当一名学生被认定为嫌疑人时,要识别所有嫌疑人并不容易。你的工作是编写一个程序来找到所有嫌疑人。

输入

输入文件包含多个案例。每个测试用例以一行中的两个整数 n 和 m 开头,其中 n 是学生数量,m 是组数。您可以假设 0 < n <= 30000 且 0 <= m <= 500。每个学生都由 0 到 n−1 之间的唯一整数编号,并且最初学生 0 在所有情况下都被识别为嫌疑人。这一行后面是组的 m 个成员列表,每组一行。每行以一个整数 k 开头,k 本身代表组中的成员数量。在成员数量之后,有 k 个整数代表该组中的学生。一行中的所有整数至少由一个空格分隔。
n = 0且m = 0的情况表示输入结束,不需要处理。

输出

对于每种情况,在一行中输出嫌疑人的数量。

输入样本

100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0

样本输出

4
1
1

直接并查集,注意最后判读与嫌疑人在一个集合的方法是判断根节点,虽然优化了查询,但是不能保证每个节点都被更改;

#include <cstdio>
#include <cstring>
#define maxn 50005
int s[maxn];
int height[maxn];
void init_set(){
	for(int i = 0;i < maxn;i++){
		s[i] = i;
		height[i] = 0;
	}
} 
int find_set(int x){
	int r = x;
	while(r != s[r]) r = s[r];
	int i = x, j;
	while(i != r){
		j = s[i];
		s[i] = r;
		i = j;
	}
	return s[x];
}
void union_set(int x, int y){
	x = find_set(x);
	y = find_set(y);
	if(height[x] == height[y]){
		height[x]++;
		s[y] = s[x];
	}
	else if(height[x] < height[y]) s[x] = s[y];
	else s[y] = s[x];
}
int main() {
	int t, n, m,x, y;
	int kase = 0;
	while(scanf("%d%d", &n, &m)){
		if(n == 0 && m == 0) break;
		init_set();
		int k;
		for(int i = 0;i < m;i++){
			scanf("%d", &k);
			scanf("%d", &x);
			for(int j = 1;j < k;j++){
				scanf("%d", &y);
				union_set(x,y);
			}
		}
		int ans = 0;
		for(int i = 0;i < n;i++){
			if(find_set(i) == find_set(0)) ans++;
		}
		printf("%d\n",ans);
	}
	return 0;
}

标签:set,嫌疑人,int,查集,height,++,简单,POJ1611,find
From: https://www.cnblogs.com/zhclovemyh/p/17995153

相关文章

  • POJ 2524 (简单并查集)
    POJ2524(简单并查集)描述当今世界上有如此多不同的宗教,很难将它们全部记录下来。您有兴趣了解您所在大学的学生信仰多少种不同的宗教。您知道您的大学有n名学生(0<n<=50000)。你不可能询问每个学生的宗教信仰。此外,许多学生不愿意表达自己的信仰。避免这些问题的一种方......
  • 既可以通过从层次结构更高层组件(如 FilterableProductTable)开始“自上而下”构建,也可
    既可以通过从层次结构更高层组件(如FilterableProductTable)开始“自上而下”构建,也可以通过从更低层级组件(如ProductRow)“自下而上”进行构建。在简单的例子中,自上而下构建通常更简单;而在大型项目中,自下而上构建更简单。为什么这么说呢?合理吗?在构建React应用时,"自上而下"(Top-Do......
  • docker-compose部署简单案例
    Dockerfile#设置基础镜像FROMpython:3.7#设置环境变量ENVPYTHONUNBUFFERED=1ENVPATH/usr/local/bin:$PATH#设置工作目录WORKDIR/home/lab#复制项目文件到容器中COPY./home/lab/#COPYrequirements.txt/home/lab#安装依赖包(先更新pip,换源,再安装包)......
  • Websocket 简单使用
    vue3  <scriptsetup>import{reactive,ref,onMounted,onBeforeMount,onUnmounted}from'vue'onMounted(()=>{initWebsocket()})onUnmounted(()=>{WebSocketonclose()})constws=reactive({socket:null,})constini......
  • Oracle数据类型的简单学习之一
    Oracle数据类型的简单学习之一背景因为信创安可替代的发展有很多项目提到了数据库切换到国产数据库的要求.一般情况是要求从Oracle/SQLServer迁移到国产的:达梦/瀚高/人大金仓/南大通用等数据库.但是因为Oracle作为数据库领域No.1的存在他对SQL的规范标准支持的并不是很......
  • 【快速阅读四】基于边缘信息的模版匹配中贪婪度参数的简单解析。
    基于边缘的匹配有个贪婪度的参数,其对提高查找目标的速度有着比较关键的作用,本问简单的记录了下对这个参数的一些认识和推导。对这个课题稍作研究,以便记录。在基于边缘的模版匹配中,我们知道可以有个贪婪度参数可以设置。在Halcon的帮助文档中,也有对......
  • typespec 简单试用
    typespec是一个强大的api描述框架,以下是一个简单的试用安装typespec可以安装为全局cli命令npminstall-g@typespec/compiler使用创建项目tspinit//后续按照提示操作,可以选择http安装依赖tspinstall......
  • MFC 滑块控件简单使用
    ▲关联值在滑块的父窗体Dlg中,BOOLCMFCApplication1Dlg::OnInitDialog()初始化:m_pos关联Textbox,m_sb关联水平滑块。//设置编辑区默认m_pos=50;UpdateData(FALSE);//设置滑块范围m_sb.SetScrollRange(0,100);//设置滑块位置m_......
  • C# 简单的 HTTP 静态文件服务 NS (Netnr.Serve)
    NS(Netnr.Serve)简单的HTTP静态文件服务SimpleHTTPstaticfileservingStart(启动)启动逐个参数设置--urls(default:http://*:713/):--root(default:D:/site):#根目录,默认命令行启动位置--index(default:index.html):--404(default:404.html):--suffix(d......
  • 可观测性系统中对用户行为如何记录的一些简单介绍
    本文仅讨论核心代码的技术实现思路,以及从代码中看出来的一些内容,涉及到的内容基本包含以下四个文件rumEventCollectionactionCollectiongetActionNameFromElementlistenActionEventstrackClickAction以下内容,方便用户了解,我做了一些整理,包括精华代码部分。监听事件获取的前提第一步......