并查集
int find(int x){ if(x==pre[x]) return x; return pre[x]=find(pre[x]); } void unite(int x,int y){ x=find(x); y=find(y); if(x!=y) pre[x]=y; } void is_connect(){//if cnt == 1 :连通集 //else:有cnt 个连通分支 for(int i=1;i<=n;i++) if(pre[i]==i) cnt++; } //查找x,y是否连通,find(x)==find(y);s int main() { for(int i=1;i<=N;i++)//初始化 pre[i]=i; return 0; }