3
1
2
4
1 | 2 | 3 | 4 |
---|---|---|---|
3 | 1 | 3 | 3 |
parent array
int parent[1000005];
void init(int n){
for(int i = 1; i <= n ++i)
parent[i] = i;
}
int Find(int x){
if(parent[x] == x)
return x;
return Find(parent[x]);
}
bool Same(int x, int y){
return Find(x)==Find(y);
}
void Union(int x, int y){
parent[Find(x)] = Find(y);
}
3
2
3
2
2
3
int parent[1000005];
int h[1000005];
void init(int n){
for(int i = 1; i <= n ++i){
parent[i] = i;
h[i] = 1;
}
}
int Find(int x); // 和之前一樣
void Union(int x, int y){
x = Find(x);
y = Find(y);
if(h[y] < h[x])
swap(x,y);
parent[x] = y;
if(h[x] == h[y])
++h[y];
}
2
3
5
int parent[1000005];
int sz[1000005];
void init(int n){
for(int i = 1; i <= n ++i){
parent[i] = i;
sz[i] = 1;
}
}
int Find(int x); // 和之前一樣
void Union(int x, int y){
x = Find(x);
y = Find(y);
if(sz[y] < sz[x])
swap(x,y);
parent[x] = y;
sz[y] += sz[x];
}
R
R
int parent[1000005];
int Find(int x){
if(parent[x] == x)
return x;
parent[x] = Find(parent[x]);
return parent[x];
}
\(\alpha(n)\)是反阿克曼函數,基本上等於常數!