标签:
#include <stdio.h> #include <stdlib.h> int pre[100005]; int num[100005],mov[100005]; int a,b; int find(int x) { if(x==pre[x]) return x; int t=pre[x]; pre[x] = find(pre[x]); mov[x] +=mov[t]; return pre[x]; } void join(int x,int y) //判断x y是否连通, //如果已经连通,就不用管了 //如果不连通,就把它们所在的连通分支合并起, { int fx=find(x),fy=find(y); //printf("!%d %d\n",fx,fy); if(fx!=fy) { pre[fx]=fy; num[fy]+=num[fx]; mov[fx]=1; } } int sets(int n) { int i; for(i=1;i<=n;i++) { pre[i]=i; num[i]=1; mov[i]=0; } } int main() { int i,t,j,k,n,m,a,b,ans,x; char p; scanf("%d",&t); for(k=1;k<=t;k++) { printf("Case %d:\n",k); scanf("%d %d",&n,&m); sets(n); for(i=0;i<m;i++) { scanf(" %c",&p); if(p==‘T‘) { scanf("%d %d",&a,&b); join(a,b); } else { scanf("%d",&a); ans=find(a); printf("%d %d %d\n",ans,num[ans],mov[a]); } } } return 0; }
2 3 3 T 1 2 T 3 2 Q 2 3 4 T 1 2 Q 1 T 1 3 Q 1
Case 1: 2 3 0 Case 2: 2 2 1 3 3 2
标签:
原文地址:http://www.cnblogs.com/Qiao994255978/p/4680496.html