zoukankan      html  css  js  c++  java
  • hdu 1856

    #include<stdio.h>
    #include<string.h>
    #define  N 10000000
    int pre[N+10],h[N+10],dis[N+10];
    int find(int n ){
    return pre[n]=n==pre[n]?n:find(pre[n]);
    }
    int main() {
    int sum,cnt,a,b,f1,f2,n,i,max,min;
    while(scanf("%d",&n)!=EOF) {
    if(n==0) {//刚开始题意没看清错了一次没有一个朋友对的话输出1
    printf("1 ");
    continue;
    }
    for(i=1;i<=N;i++)
    pre[i]=i;
    min=1000000000;max=0;
    while(n--) {
    scanf("%d%d",&a,&b);
    f1=find(a);
    f2=find(b);
    if(f1!=f2)
    pre[f2]=f1;
    dis[a]=dis[b]=1;
    min=min<a?min:a;
    min=min<b?min:b;
    max=max>a?max:a;
    max=max>b?max:b;
    }
    cnt=0;
    memset(h,0,sizeof(h));
    for(i=min;i<=max;i++)
    if(dis[i]) 
    h[find(i)]++;
    for(i=min;i<=max;i++) 
    if(cnt<h[i])
    cnt=h[i];
    printf("%d ",cnt);
    }
    return 0;

    }

    一个更简单的代码

    #include<stdio.h>
    #include<string.h>
    #define N 10000001
    int pre[N+10],sum[N];
    int find(int a) {
        if(pre[a]==a)
            return a;
        pre[a]=find(pre[a]);
        return pre[a];
    }
    int main() {
        int a,n,b,f1,f2,max,i;
        while(scanf("%d",&n)!=EOF) {
            for(i=1;i<=N;i++) {
                sum[i]=1;
                pre[i]=i;
            }
            max=1;
            while(n--) {
                scanf("%d%d",&a,&b);
                a=find(a);
                b=find(b);
                if(a!=b) {
                    pre[b]=a;
                    sum[a]+=sum[b];
                    if(sum[a]>max)
                        max=sum[a];
                }
            }
    printf("%d
    ",max);
        }
        return 0;
    }






  • 相关阅读:
    设计模式Day02
    OA,ERP等源码一部分演示
    第三方登录
    其实没那么复杂!探究react-native通信机制
    学习面试题(day01)
    学习面试题Day02
    学习面试题Day03
    python 字典排序
    Mac系统下adb工具的配置
    Mac adb 安装
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410961.html
Copyright © 2011-2022 走看看