Submission #17535364
Source Code Expand
import typing
class DSU:
'''
Implement (union by size) + (path compression)
Reference:
Zvi Galil and Giuseppe F. Italiano,
Data structures and algorithms for disjoint set union problems
'''
def __init__(self, n: int = 0):
self._n = n
self.parent_or_size = [-1] * n
def merge(self, a: int, b: int) -> int:
assert 0 <= a < self._n
assert 0 <= b < self._n
x = self.leader(a)
y = self.leader(b)
if x == y:
return x
if -self.parent_or_size[x] < -self.parent_or_size[y]:
x, y = y, x
self.parent_or_size[x] += self.parent_or_size[y]
self.parent_or_size[y] = x
return x
def same(self, a: int, b: int) -> bool:
assert 0 <= a < self._n
assert 0 <= b < self._n
return self.leader(a) == self.leader(b)
def leader(self, a: int) -> int:
assert 0 <= a < self._n
if self.parent_or_size[a] < 0:
return a
self.parent_or_size[a] = self.leader(self.parent_or_size[a])
return self.parent_or_size[a]
def size(self, a: int) -> int:
assert 0 <= a < self._n
return -self.parent_or_size[self.leader(a)]
def groups(self) -> typing.List[typing.List[int]]:
leader_buf = [self.leader(i) for i in range(self._n)]
result: typing.List[typing.List[int]] = [[] for _ in range(self._n)]
for i in range(self._n):
result[leader_buf[i]].append(i)
return list(filter(lambda r: r, result))
n, q = map(int, input().split())
dsu = DSU(n)
res = []
for i in range(q):
t, u, v = map(int, input().split())
if t == 0:
dsu.merge(u, v)
else:
if dsu.same(u, v):
res.append(1)
else:
res.append(0)
print('\n'.join(map(str, res)))
Submission Info
| Submission Time | |
|---|---|
| Task | A - Disjoint Set Union |
| User | c_r_5 |
| Language | Python (3.8.2) |
| Score | 100 |
| Code Size | 1844 Byte |
| Status | AC |
| Exec Time | 635 ms |
| Memory | 19468 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 100 / 100 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example_00 |
| All | example_00, random_00, random_01, random_02, random_03, random_04, random_05, random_06, random_07, random_08, random_09 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| example_00 | AC | 33 ms | 9912 KiB |
| random_00 | AC | 486 ms | 18112 KiB |
| random_01 | AC | 468 ms | 18656 KiB |
| random_02 | AC | 402 ms | 15452 KiB |
| random_03 | AC | 110 ms | 12608 KiB |
| random_04 | AC | 339 ms | 14184 KiB |
| random_05 | AC | 462 ms | 16512 KiB |
| random_06 | AC | 351 ms | 17072 KiB |
| random_07 | AC | 66 ms | 11324 KiB |
| random_08 | AC | 185 ms | 11916 KiB |
| random_09 | AC | 635 ms | 19468 KiB |