3
self.par = list(range(N))8
self.par[x] = self.find(self.par[x])11
def union(self, x, y):12
xr, yr = self.find(x), self.find(y)15
elif self.rnk[xr] < self.rnk[yr]:17
elif self.rnk[xr] > self.rnk[yr]:26
def swimInWater(self, grid):28
for i, j in product(range(N), range(N)):29
d[grid[i][j]] = (i, j)32
grid = [[0] * N for _ in range(N)]33
neib_list = [[0, 1], [0, -1], [1, 0], [-1, 0]]35
for i in range(N * N):38
for dx, dy in neib_list:39
if N > x + dx >= 0 and N > y + dy >= 0 and grid[x + dx][y + dy] == 1:40
dsu.union((x + dx) * N + y + dy, x * N + y)42
if dsu.find(0) == dsu.find(N * N - 1):