How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9425 Accepted Submission(s): 4658
Problem Description
Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with strangers.
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
Input
The input starts with an integer T(1<=T<=25) which indicate the number of test cases. Then T test cases follow. Each test case starts with two integers N and M(1<=N,M<=1000). N indicates the number of friends, the friends are marked from 1 to N. Then M lines follow. Each line consists of two integers A and B(A!=B), that means friend A and friend B know each other. There will be a blank line between two cases.
Output
For each test case, just output how many tables Ignatius needs at least. Do NOT print any blanks.
Sample Input
2
5 3
1 2
2 3
4 5
5 1
2 5
Sample Output
2
4
题意:
有T(1到25)个Case,每个Case首先有N个人(1到1000)和M(1到1000)对朋友关系,如果a和b是朋友,b和c是朋友,那么a和c也算是朋友。规定同是朋友的可以坐在同一桌台上,不是朋友的则不能,问最少需要有多少张台。
思路:
并查集基础题。先把每个人都分别算为一个独立的集合,然后再根据给出的朋友关系合并到同一个集合中,最后算一共有几个集合即可。
AC:
#include<stdio.h> #include<string.h> int main() { int t; int set[1005]; //代表每个人属于哪个集合 scanf("%d",&t); while(t--) { int n,m; int sum=0; scanf("%d%d",&n,&m); memset(set,0,sizeof(set)); for(int i=1;i<=n;i++) set[i]=i; //每个人独立为一个集合 while(m--) { int a,b; int x,y; scanf("%d%d",&a,&b); x=set[a]; y=set[b]; if(x==y) continue; //如果属于同一个集合则不需合并 if(x>y) { for(int j=1;j<=n;j++) if(set[j]==x) set[j]=y; } if(x<y) { for(int j=1;j<=n;j++) if(set[j]==y) set[j]=x; } //如果不属于同一个集合则合并,将处于集合更大的序数合并到小的序号中 } for(int i=1;i<=n;i++) if(set[i]==i) sum++; //每个集合都以小序号的名字命名 //所以当集合名与本身序数一样,说明为一个新的集合 printf("%d\n",sum); } return 0; }
小改进:
#include<stdio.h> #include<string.h> int main() { int t; int set[1005]; scanf("%d",&t); while(t--) { int n,m,sum; scanf("%d%d",&n,&m); memset(set,0,sizeof(set)); for(int i=1;i<=n;i++) set[i]=i; sum=0; while(m--) { int a,b; int min,max,temp; scanf("%d%d",&a,&b); min=set[a]; max=set[b]; if(min==max) continue; //主要是这段 if(min>max) { temp=min; min=max; max=temp; } for(int i=1;i<=n;i++) if(set[i]==max) set[i]=min; //合并不是同一集合的元素 } for(int i=1;i<=n;i++) if(set[i]==i) sum++; printf("%d\n",sum); } return 0; }
总结:
一开始还以为有多难,原理不难懂,关键是敲代码。敲得太少,加上畏难心理,拖延浪费了不少时间。
相关推荐
本资源提供了多种关于并查集的题目,例如 How Many Tables、小希的迷宫、Is It A Tree?等。 枚举最小生成树 枚举最小生成树是一种组合算法,用于解决最小生成树问题。本资源提供了多种关于枚举最小生成树的题目,...
Unit 3 How Many单元测试题及答案2.doc
【Lesson 9 How Many】是针对儿童或者初学者设计的一份英语学习材料,主要目标是教授和练习如何用英语询问和表达数量。这份文档包含了数数、填空和选择题等练习,旨在帮助学习者掌握"How many"这个句型的使用。 在...
在英语中,"how many" 和 "how much" 都是用来询问数量的,但它们有明显的区别和特定的使用场景。这份PPT课件详细解释了这两个短语的用法,对于学习者来说是非常有用的资源。 首先,"how many" 用于询问可数名词的...
这篇PPT课件是针对小学英语外研版三年级上册Unit1 "How many" 的教学内容,主要涉及了颜色、数字以及简单的数学加法运算,旨在帮助学生掌握基础的英语词汇和句型,同时培养他们的计数能力和初步的数学思维。...
总的来说,这个单元的教学重点在于教授孩子如何使用"How many"来询问数量,并结合实际情境(如学校的教室和学生数量)进行练习,同时复习和巩固英文数字的书写。通过这样的学习,学生能够提高他们的英语听说读写能力...
在小学英语语法中,"how many" 和 "how much" 是两个非常重要的概念,它们用于询问数量,但针对的对象不同。 1. **how many** 主要用来修饰**可数名词的复数形式**。它的基本句型是:"How many + 复数名词 + 一般...
这篇内容是关于新人教PEP版三年级下册英语教材中的第六单元 "How many" 的一套完整课件。这个单元主要教授学生如何询问和回答可数名词的数量,特别是使用"How many"这一疑问词。 首先,"Warm-up"部分复习了复数形式...
How many are therePPT教案.pptx
How many kites are therePPT教案.pptx
How many classes do you havePPT教案.pptx
- 能力目标:通过课堂活动,学生应能听、说、读、写这五个词汇,并运用"How many"句型进行简单的交流,如借东西。 - 情感目标:激发学生用英语表达周围事物的兴趣,培养他们使用英语的能力,同时对外国文化习俗...
一、内容 TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he is always wooing TT to play the following game with him. This is a very humdrum game....
《Hownet情感词语集》是一个重要的资源,它在自然语言处理(NLP)和情感分析领域具有广泛的应用。Hownet,又称汉语义网,是中国首个大规模的汉语语义词典,由北京师范大学和微软亚洲研究院合作开发,旨在通过词汇...
总的来说,这个三年级的英语课件旨在通过互动和实践,让学生掌握询问数量的句型"How many",并同时训练他们的英语听力、口语、阅读和数学计算能力。通过这种寓教于乐的方式,孩子们能够在轻松愉快的环境中提升自己的...
How many people are there in your familyPPT教案.pptx
Lesson 5 How many练习题及答案2.doc
在教学中,教师应引导学生理解"How many"用于询问数量,并演示如何回答"I have one book." 或者直接给出数字,如"Three."。 - 另一个重点句型是"I have…",用于表达某人拥有某物的数量。教师需确保学生能熟练地...
Unit 5 How many pens are there练习题2.doc
【四年级英语Module 3 Unit 6 How many classrooms are there in yourschool?】这个单元主要聚焦于学习和应用与数量相关的英语表达,特别是在学校环境中的场景。在这个单元中,学生将学习如何用英文询问和回答关于...