並查集spa
1.合併兩個集合code
2.查詢兩個數是否在一個集合blog
基本原理:class
每一個集合用一棵樹來表示,樹根的編號就是整個集合的編號,每一個結點存儲他的父節點,p[x]表示x的父節點原理
1.是不是一個集合 if( find(a)==find(b) )im
2.合併兩個集合 p[find(a)]=find(b) 查詢
static int p[]=new int[N]; static int find(int x){ //返回x的祖宗結點+路徑壓縮 if(p[x]!=x) p[x]=find(p[x]); return p[x]; }