前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pta习题集5-16 朋友圈

pta习题集5-16 朋友圈

作者头像
ShenduCC
发布2018-04-27 11:49:23
8890
发布2018-04-27 11:49:23
举报
文章被收录于专栏:算法修养算法修养

某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。请编写程序计算最大朋友圈中有多少人。

输入格式:

输入的第一行包含两个正整数N(≤≤30000)和M(≤≤1000),分别代表学校的学生总数和俱乐部的个数。后面的M行每行按以下格式给出1个俱乐部的信息,其中学生从1~N编号:

第i个俱乐部的人数Mi(空格)学生1(空格)学生2 … 学生Mi

输出格式:

输出给出一个整数,表示在最大朋友圈中有多少人。

输入样例:

代码语言:javascript
复制
7 4
3 1 2 3
2 1 4
3 5 6 7
1 6

输出样例:

代码语言:javascript
复制
4
代码语言:javascript
复制
并查集
代码语言:javascript
复制
include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string>
#include <map>
#include <algorithm>

using namespace std;
int n,m;
int father[30005];
int find(int x)
{
	if(father[x]!=x)
		father[x]=find(father[x]);
	else
		return father[x];
}
int ans[30005];
int main()
{
	scanf("%d%d",&n,&m);
	int x;
	int y;
	for(int i=1;i<=n;i++)
		father[i]=i;

	for(int i=1;i<=m;i++)
	{
		scanf("%d",&x);
		int yy=0;
		for(int j=1;j<=x;j++)
		{
			scanf("%d",&y);
			if(yy!=0)
			{
				int fx=find(yy);
				int fy=find(y);
				father[fx]=fy;
			}
			else
				yy=y;
		}
	}
	for(int i=1;i<=n;i++)
	{
		int fa=find(i);
		ans[fa]++;
	}
	sort(ans+1,ans+n+1);
	printf("%d\n",ans[n]);
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式:
  • 输出格式:
  • 输入样例:
  • 输出样例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档