1. 程式人生 > >並查集寫成一個類

並查集寫成一個類

col truct pac 並查集 cst clas div main amp

這個應該不用多說。。

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 const int maxn=10005;
 5 int n, m;
 6 
 7 struct Ufset{
 8     int fa[maxn], size[maxn];
 9 
10     Ufset(int n){
11         for (int i=1; i<=n; ++i){
12             fa[i]=i;
13             size[i]=1;
14         }
15         return
; 16 } 17 18 int find(int x){ 19 int anc, realf; 20 for (anc=x; fa[anc]!=anc; anc=fa[anc]); 21 while (fa[x]!=x){ 22 realf=fa[x]; 23 fa[x]=anc; 24 x=realf; 25 } 26 return anc; 27 } 28 29 bool in_same(int x, int
y){ 30 if (find(x)!=find(y)) return false; 31 else return true; 32 } 33 34 void merge_to(int x, int y){ //merge x to y 35 int fx=find(x), fy=find(y); 36 fa[fx]=fy; 37 return; 38 } 39 40 void merge(int x, int y){ 41 if (size[x]>size[y])
42 merge_to(y, x); 43 else merge_to(x, y); 44 } 45 }; 46 47 int main(){ 48 scanf("%d%d", &n, &m); 49 Ufset ufset1(n); 50 int z, x, y; 51 for (int i=0; i<m; ++i){ 52 scanf("%d%d%d", &z, &x, &y); 53 if (z==1) 54 ufset1.merge(x, y); 55 else 56 printf("%c\n", 57 ufset1.in_same(x, y)?Y:N); 58 } 59 return 0; 60 }

來自luoguP3367

並查集寫成一個類