![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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交换。。