首页 > 其他 > 详细

HDU 1856 More is better

时间:2014-02-15 16:27:30      阅读:278      评论:0      收藏:0      [点我收藏+]

题解:用并查集将所有的朋友合并,最后记录最大的连通块即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <cstdio>
int f[10000010],max,sum[10000010],cnt;
 
int sf(int x){
    if(f[x]!=x)f[x]=sf(f[x]);
    return f[x];
}
 
int main(){
    int n,x,y;
    while(scanf("%d",&n)!=EOF){
        if(n==0){puts("1");continue;}
        for(int i=1;i<10000010;i++){f[i]=i;sum[i]=0;}
        cnt=0;
        for(int i=0;i<n;i++){
            scanf("%d%d",&x,&y);
            f[sf(x)]=sf(y);
            x=x>y?x:y;
            cnt=x>cnt?x:cnt;
        }
        max=0;
        for(int i=1;i<=cnt;i++)
        if ((++sum[sf(i)])>max) max=sum[f[i]];
        printf("%d\n",max);
    }
    return 0;
}

HDU 1856 More is better

原文:http://www.cnblogs.com/forever97/p/3550447.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!