//查找这个人又多少个朋友,必须从他的祖先开始查,num[find(a)];
AC代码:
#include<stdio.h> #define max 100005 int 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; }