《并查集》hdu acm 5.1.5 记录转移次数

来源:互联网 发布:linux oracle tns配置 编辑:程序博客网 时间:2024/06/05 16:04
#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;}
0 0