ZOJ-2833Friendship(简单并查集)

来源:互联网 发布:mac os x 10.12懒人版 编辑:程序博客网 时间:2024/06/06 12:28

//查找这个人又多少个朋友,必须从他的祖先开始查,num[find(a)];

AC代码:

#include<stdio.h>#define max 100005int p[max];int num[max];char s[max];int a,b;int find(int k){    if(p[k]!=k)    {        p[k]=find(p[k]);        num[k]+=num[p[k]];    }    return p[k];}int bing(int x,int y){    int x1=find(x);    int y1=find(y);    if(x1==y1)    {        return 0;    }    p[y1]=x1;    num[x1]+=num[y1];    return 1;}int main(){    int m,n;    int k=1;    int o=0;    while(scanf("%d%d",&m,&n)!=EOF&&m)    {        int i,j;        if(o)        {            printf("\n");        }        o=1;        for(i=1;i<=max;i++)        {            p[i]=i;            num[i]=1;        }        printf("Case %d:\n",k++);        for(i=0;i<n;i++)        {            scanf("%s",s);            if(s[0]=='M')            {                scanf("%d%d",&a,&b);                bing(a,b);            }            if(s[0]=='Q')            {                scanf("%d",&a);                printf("%d\n",num[find(a)]);            }        }    }    return 0;}

0 0
原创粉丝点击