英语四六级系列(二)
  z797zFE4S4a9 2023年11月02日 43 0


英语四六级系列(二)

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

昨天,小明期待已久的英语四六级出成绩了,不幸的是,小明没有及格(::>_<::)。通过和自己的好友聊天,小明知道了很多好友的成绩。于是,无聊的小明自己划分了一些分数段,并统计自己的好友在每个分数段的人数(有些分数段只有一个人),他想知道人数最多的分数段有多少人。

可是,小明数学不太好,你能帮一下他吗? 假设他有n名好友,好友编号为0~n-1。

输入

多组输入,每组第一行是两个整数n,m(2 <= n <= 10000, 0 <= m <=1000)。

接下来m行,每行两个整数a,b(0 <= a,b <= n-1)。

代表好友a和好友b在同一个分数段上。

输出

输出一行,输出人数最多的分数段有多少人。

示例输入

4 2 1 2 2 3 6 3 0 1 2 3 2 4

示例输出

3 3

提示

 

来源

xj

示例程序

#include "stdio.h"  
int bin[100002],a[10001],j;  
/*find3(x) 
{ 
      int r = x; 
      while (bin[r] != r) //循环结束,则找到根节点 
          r = bin[r]; 
      int i = x; 
      while (i!=r) //本循环修改查找路径中所有节点 
      { 
          j = bin[i]; 
         bin[i] = r; 
          i = j; 
      } 
      return r; 
}*/  
  
int find3(int x)  
{  
    int r=x;  
    while(bin[r] !=r)  
        r=bin[r];  
    return r;  
}  
void merge(int x,int y)  
{  
    int fx,fy;  
    fx = find3(x);  
    fy = find3(y);  
    if(fx != fy)  
        {  
            bin[fx] = fy;  
        }  
}  
int main()  
{  
    int n,m,i,x,h,y;  
    while(scanf("%d%d",&n,&m)!=EOF)  
    {  
        memset(a,0,sizeof(a));  
        int c = 0;  
        for(i=0;i<n;i++)  
            bin[i] = i;  
        for(h=m;h>0;h--)  
        {  
            scanf("%d %d",&x,&y);  
            merge(x,y);  
        }  
        for(i=0;i<n;i++)  
        {  
            a[find3(i)]++;  
            if(a[find3(i)]>c)  
            {  
                c = a[find3(i)];  
            }  
        }  
  
  
        /*for(count=0, i=0;i<n;i++) 
            if(bin[i] == i) 
                count ++; 
        printf("Case %d: %d\n",z,count); 
        z++;*/  
        printf("%d\n",c);  
    }  
       return 0;  
}  
  
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

z797zFE4S4a9
最新推荐 更多

2024-05-31