Rt,有一些困惑。
我惯用的是循环写法:
inline int find(int x){ while(x!=f[x]) x=f[x]=f[f[x]]; return x; }
然后我突然发现除了我以外全班都是这样写的:
int find(int x){ return x==f[x]?x:(f[x]=find(f[x])); }
我想了想,我的写法似乎每次只能将长度干掉一半,而其他人的写法是全部连到祖先上去,那不是理应第二种吊打第一种吗?可是我拍了上百组,都是第一种时间小于等于第二种?
为什么?