标签:size else str 不用 并查集 void merge pac als
这个应该不用多说。。
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
标签:size else str 不用 并查集 void merge pac als
原文地址:http://www.cnblogs.com/MyNameIsPc/p/7450052.html