Spaces:
Runtime error
Runtime error
'''Translation of the following code from C++ to Pythonstruct UnionFind { std::vector<u64> parent, ranks; explicit UnionFind(u64 size) { pa ...
#8
by
EvgeniyZh
- opened
Question:
'''
Translation of the following code from C++ to Python
struct UnionFind {
std::vector parent, ranks;
explicit UnionFind(u64 size) {
parent = std::vector(size);
ranks = std::vector(size);
for (u64 i = 0; i < size; ++i) {
parent[i] = i;
ranks[i] = 1;
}
}
u64 find(u64 x) {
if (x != parent[x]) return parent[x] = find(parent[x]);
return x;
}
void link(u64 x, u64 y) {
x = find(x);
y = find(y);
if (x == y) return;
if (ranks[x] >= ranks[y]) {
parent[y] = x;
if (ranks[x] == ranks[y]) ++ranks[x];
} else {
parent[x] = y;
}
}
};
'''
class UnionFind:
Answer:
'''
Translation of the following code from C++ to Python
struct UnionFind {
std::vector parent, ranks;
explicit UnionFind(u64 size) {
parent = std::vector(size);
ranks = std::vector(size);
for (u64 i = 0; i < size; ++i) {
parent[i] = i;
ranks[i] = 1;
}
}
u64 find(u64 x) {
if (x != parent[x]) return parent[x] = find(parent[x]);
return x;
}
void link(u64 x, u64 y) {
x = find(x);
y = find(y);
if (x == y) return;
if (ranks[x] >= ranks[y]) {
parent[y] = x;
if (ranks[x] == ranks[y]) ++ranks[x];
} else {
parent[x] = y;
}
}
};
'''
class UnionFind:
def __init__(self, size):
self.parent = [i for i in range(size)]
self.ranks = [1]*size
def find(self, x):
if self.parent[x]!= x:
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def link(self, x, y):
x = self.find(x)
y = self.find(y)
if x == y:
return
if self.ranks[x] > self.ranks[y]:
self.parent[y] = x
elif self.ranks[x] < self.ranks[y]:
self.parent[x] = y
else:
self.parent[y] = x
self.ranks[x] += 1
<|endoftext|>