关闭

Friends--并查集

122人阅读 评论(0) 收藏 举报
分类:

#include <map>
#include <queue>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define maxn 30100
using namespace std;
int set[maxn],sum[maxn],imax;
int set_find(int d){
    if(set[d]<0)
        return d;
    else return set_find(set[d]);
}
void join(int a,int b){
    int x=set_find(a);
    int y=set_find(b);
    if(x!=y){
        set[x]=y;
        sum[y]+=sum[x];
        imax=sum[y]>imax?sum[y]:imax;
    }
}
int main(){
    int loop;
    scanf("%d",&loop);
    while(loop--){
        int x,y,n,m;
        scanf("%d%d",&n,&m);
         for(int i=0;i<n;++i){
                sum[i]=1;
                set[i]=-1;
        }
        imax=0;
        while(m--){
            scanf("%d%d",&x,&y);
            join(x,y);
        }
        printf("%d\n",imax);
    }
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:60303次
    • 积分:2340
    • 等级:
    • 排名:第17564名
    • 原创:170篇
    • 转载:47篇
    • 译文:0篇
    • 评论:21条
    最新评论