zoukankan      html  css  js  c++  java
  • pta习题集5-16 朋友圈

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

    输入格式:

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

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

    输出格式:

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

    输入样例:

    7 4
    3 1 2 3
    2 1 4
    3 5 6 7
    1 6
    

    输出样例:

    4
    并查集
    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
    ",ans[n]);
    	return 0;
    }
    


  • 相关阅读:
    windows安装nacos
    anki处理
    minikube安装net5
    在.net core中使用属性注入
    C# 使用MD5算法对密码进行加密
    c# 获取本机系统已经安装的打印机信息
    C# 比较两个datatable并找出修改差异的值
    打印机点击打印后无反应
    GUID转换成16位字符串或19位数据(确保唯一)
    RESTful
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228544.html
Copyright © 2011-2022 走看看