#include<stdio.h> int f[10005],num[10005],times[10005]; int find(int x) { if(x==f[x]) return x; int y=f[x]; f[x]=find(f[x]); times[x]+=times[y]; return f[x]; } void merge(int x,int y) { int fx,fy; fx=find(x); fy=find(y); f[fx]=fy; num[fy]+=num[fx]; times[fx]=1; } int main() { int y,i,a,b,x,n,k,q,t; char ch; scanf("%d",&t); int cas=0; while(t--) { printf("Case %d:\n",++cas); scanf("%d%d",&n,&q); for(i=1;i<=n;i++) { f[i]=i; times[i]=0; num[i]=1; } for(i=1;i<=q;i++) { scanf("%s",&ch); if(ch=='T') { scanf("%d%d",&a,&b); merge(a,b); } else { scanf("%d",&k); int x=find(k); printf("%d %d %d\n",x,num[x],times[k]); } } } return 0; }
《并查集》hdu acm 5.1.5 记录转移次数

最新推荐文章于 2022-04-05 22:29:03 发布
