现在的位置: 首页 > 综合 > 正文

Nyoj 790 The More,the Better[基础并查集]

2017年05月30日 ⁄ 综合 ⁄ 共 883字 ⁄ 字号 评论关闭

题目链接:气点

#include<stdio.h>
#define N 1005
int father[N],rank[N];
void Init()
{
    for(int i=1;i<=N;i++)
    {
        father[i]=i;
        rank[i]=1;
    }
}
int Find_Father(int x)
{
    if(x!=father[x])
    father[x]=Find_Father(father[x]);
    return father[x];
}
void Union(int a,int b)
{
    int x=Find_Father(a);
    int y=Find_Father(b);
    if(x==y) return;
    if(rank[x]>rank[y])
    {
        rank[x]+=rank[y];
        father[y]=x;
    }
    else
    {
        rank[y]+=rank[x];
        father[x]=y;
    }
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        Init();
        int a,b;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&a,&b);
            Union(a,b);
        }
        int MAX=0;
        for(int i=1;i<=N;i++)
        if(rank[i]>MAX) MAX=rank[i];
        printf("%d\n",MAX);
    }
}
/*
  小小的模板
*/
#define N ?
int father[N],rank[N];
void Init()
{
    for(int i=1;i<=N;i++)
    father[i]=i,rank[i]=1;
}
int Find_Father(x)
{
    if(x!=father[x])
    father[x]=Find_Father(father[x]);
    return father[x];
}
void Union(int a,int b)
{
    int x=Find_Father(a);
    int y=Find_Father(b);
    if(x==y) return;
    if(rank[x]>rank[y])
    {
        father[y]=x;
        rank[x]+=rank[y];
    }
    else
    {
        father[x]=y;
        rank[y]+=rank[x];
    }
}

抱歉!评论已关闭.