emm并没有什么好说的.毕竟我这个蒟蒻都能yy出来
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<cmath> 5 using namespace std; 6 int t,fa[30010],dis[30010],num[30010]; 7 //dis距离num数量 8 char s; 9 int find(int n) 10 { 11 if(fa[n]==n)return n; 12 int father=fa[n]; 13 fa[n]=find(fa[n]); 14 dis[n]+=dis[father]; 15 num[n]=num[fa[n]]; 16 //更新一下 17 return fa[n]; 18 } 19 void he(int a,int b)//合并所以合并的英文貌似是merge 20 { 21 int f1=find(a),f2=find(b); 22 if(f1!=f2){ 23 fa[f1]=f2; 24 dis[f1]=dis[f2]+num[f2]; 25 num[f1]+=num[f2]; 26 num[f2]=num[f1]; 27 } 28 } 29 30 int query(int a,int b)//查询 31 { 32 int f1=find(a),f2=find(b); 33 if(f1==f2){ 34 return abs(dis[a]-dis[b]); 35 } 36 return 0; 37 } 38 39 int main() 40 { 41 int i,j; 42 scanf("%d",&t); 43 for(i=1;i<=30000;i++) 44 { 45 fa[i]=i;dis[i]=0;num[i]=1; 46 } 47 for(i=1;i<=t;i++) 48 { 49 cin>>s; 50 int a,b; 51 scanf("%d%d",&a,&b); 52 if(s=='M')he(a,b); 53 else printf("%d\n",query(a,b)-1); 54 } 55 return 0; 56 }
没啦