5-25 朋友圈 (25分)

原创 2016年08月30日 09:35:16

5-25 朋友圈 (25分)

某学校有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 <stdio.h>
#include<stdlib.h>
/* 评测结果 时间  结果  得分  题目  编译器     用时(ms)  内存(MB)  用户
2016-08-30 09:30    答案正确    25  5-25    gcc     12  1   569985011
测试点结果 测试点   结果  得分/满分   用时(ms)  内存(MB)
测试点1    答案正确    18/18   2   1
测试点2    答案正确    2/2     1   1
测试点3    答案正确    5/5     12  1
查看代码*/
typedef struct node *Students;
struct node {
    int identifier;
    int pub;
};
/*对每个学生所归属的多个pub进行合并。
合并到最后,那个最大的pub就是要查询的最大朋友圈了*/


int main() {
    int n;//<=30000学生人数
    int m;//<=1000俱乐部的个数
    scanf("%d%d",&n,&m);
    int Students[30001];
    for(int i=0; i<n; i++) {
        Students[i+1]=-1;
    }
    int Pubs[1001];
    for(int i=0; i<m; i++) {
        Pubs[i]=i;
    }




    for(int i=0; i<m; i++) {
        int members;
        int flag=i;
        scanf("%d",&members);
        while(members--) {
            int Eachmember;
            scanf("%d",&Eachmember);
            if(Students[Eachmember]==-1) {//对于没有组织的学生进行入会登记
                Students[Eachmember]=flag;
            } else { //对老油条,调整pub的父节点,同时修改flag为当前发现的最先pub
//          printf("[%d-S%d]",i,Eachmember);
                int parents=Pubs[i]<Pubs[Students[Eachmember]]?Pubs[i]:Pubs[Students[Eachmember]];
                Pubs[i]=parents;
                Pubs[Students[Eachmember]]=parents;
                flag=parents;
            }
        }
    }
for(int i=0;i<n;i++){//复查
    Students[i]=Pubs[Students[i]];
}
int MostFriends=0;
for(int i=0;i<m;i++){
    if(Pubs[i]!=i)continue;
//  printf("\npub%d:",i);
    int Friends=0;
    for(int j=1;j<=n;j++){
//      printf("%d ",j);
        if(Students[j]==i)Friends++;
    }
    if(Friends>MostFriends)MostFriends=Friends;
}
printf("%d",MostFriends);


    return 0;
}


//Students Creat(int n){
//  Students temp=(Students)malloc(sizeof(struct node)*n);
//  for(int i=0;i<n;i++){
//      temp[i].identifier=i;
//
//  }
//}
版权声明:写这些东西还是问了交流进步,如果你有不同的方法、见解,欢迎交流分享。文章中附的代码只传达当时我的一种做法,并非我认为最好的。

7-25 朋友圈(25 分)

7-25 朋友圈(25 分) 某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友...
  • lyw_321
  • lyw_321
  • 2017年09月23日 11:19
  • 234

PTA 5-25 朋友圈

并查集,第一种是网上学习的代码,对它进行了排序,快一点,第二种就是普通的并查集。 //非常规并查集 并查集数组存的是这一个数一共有几个点 用负数来表示 #include #include #defi...
  • woyuhuaijin
  • woyuhuaijin
  • 2016年05月11日 21:27
  • 664

ACMCLUB HDU ACM D题 朋友圈 并查集

问题 D : 朋友圈 时间限制:1 秒 内存限制:32 兆 特殊判题: 否 提交:57 解决: 15 题目描述 小明所在的学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着...
  • IAccepted
  • IAccepted
  • 2014年03月08日 22:02
  • 2353

5-9 朋友圈 (并查集)

某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友...
  • qq_33362864
  • qq_33362864
  • 2016年07月10日 19:06
  • 772

cccc 朋友圈

题目链接:点击打开链接 某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”...
  • txgANG
  • txgANG
  • 2016年07月09日 21:35
  • 386

5-25 朋友圈 (25分) -- 简单并查集

5-25 朋友圈   (25分) 某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友...
  • qq_26437925
  • qq_26437925
  • 2015年10月10日 11:07
  • 1614

5-25 朋友圈

某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友...
  • u014376961
  • u014376961
  • 2016年07月19日 21:48
  • 709

PAT 朋友圈(并查集)

某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友...
  • qq_27601815
  • qq_27601815
  • 2016年05月16日 20:31
  • 802

PTA 5-3 朋友圈(并差集)

5-3 朋友圈 (25分) 某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这...
  • Viscu
  • Viscu
  • 2017年03月19日 17:50
  • 227

5-2 朋友圈 (25分)

5-2 朋友圈   (25分) 某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也...
  • shi201619616
  • shi201619616
  • 2017年07月27日 12:19
  • 160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:5-25 朋友圈 (25分)
举报原因:
原因补充:

(最多只允许输入30个字)