View Code
1 procedure union(x,y:longint);
2 begin
3 if r[y]<r[x] then
4 begin
5 y:=y xor x;
6 x:=y xor x;
7 y:=y xor x
8 end;//交换,有疑问者请参照xor的运算
xor是“异或”表达式

比如a=2 b=3
则二进制是a=(10)2 b=(11)2
第一次运算 :同位得0 异或得1 ,10 xor 11 = 01(a) ,此时a=01 b=11
第二次运算 :01 xor 11 = 10(b) ,此时a=01 b=10
第三次运算 :01 xor 10= 11(a) ,此时a=11 b=10

运算方法
a= 1  0
   -  -  
b= 1  1
   ↓  ↓
得 0  1
=======
很神奇、有趣、奇葩(对于我来说)的swap交换。。