Skip to content

Commit 0e9610e

Browse files
committed
Mar 20
1 parent 4012361 commit 0e9610e

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class UnionFind:
2+
def __init__(self, n: int):
3+
self.parent = list(range(n))
4+
self.rank = [0] * n
5+
self.weights = [-1] * n
6+
7+
def find(self, x: int) -> int:
8+
if x != self.parent[x]:
9+
self.parent[x] = self.find(self.parent[x])
10+
return self.parent[x]
11+
12+
def union(self, x: int, y: int, weight: int) -> None:
13+
xx, yy = self.find(x), self.find(y)
14+
if self.rank[xx] < self.rank[yy]:
15+
self.parent[xx] = yy
16+
else:
17+
self.parent[yy] = xx
18+
19+
self.weights[xx] = self.weights[yy] = self.weights[xx] & self.weights[yy] & weight
20+
if self.rank[xx] == self.rank[yy]:
21+
self.rank[xx] += 1
22+
23+
def minimum_cost_of_walk(self, x: int, y: int) -> int:
24+
if x == y:
25+
return 0
26+
if self.find(x) != self.find(y):
27+
return -1
28+
return self.weights[self.find(x)]
29+
30+
31+
class Solution:
32+
def minimumCost(self, n: int, edges: list[list[int]], query: list[list[int]]) -> list[int]:
33+
uf = UnionFind(n)
34+
for u, v, w in edges:
35+
uf.union(u, v, w)
36+
return [uf.minimum_cost_of_walk(u, v) for u, v in query]
37+
38+
39+
def main():
40+
n = 5
41+
edges = [[0, 1, 7], [1, 3, 7], [1, 2, 1]]
42+
query = [[0, 3], [3, 4]]
43+
assert Solution().minimumCost(n, edges, query) == [1, -1]
44+
45+
n = 3
46+
edges = [[0, 2, 7], [0, 1, 15], [1, 2, 6], [1, 2, 1]]
47+
query = [[1, 2]]
48+
assert Solution().minimumCost(n, edges, query) == [0]
49+
50+
51+
if __name__ == '__main__':
52+
main()

2025-03-March-LeetCoding-Challenge/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
| March 17 | [2206. Divide Array Into Equal Pairs](https://leetcode.com/problems/divide-array-into-equal-pairs/) | Easy | Solved |
2424
| March 18 | [2401. Longest Nice Subarray](https://leetcode.com/problems/longest-nice-subarray/) | Medium | Unsolved |
2525
| March 19 | [3191. Minimum Operations to Make Binary Array Elements Equal to One I](https://leetcode.com/problems/minimum-operations-to-make-binary-array-elements-equal-to-one-i/) | Medium | Solved |
26-
| March 20 | []() | | |
26+
| March 20 | [3108. Minimum Cost Walk in Weighted Graph](https://leetcode.com/problems/minimum-cost-walk-in-weighted-graph/) | Hard | Unsolved |
2727
| March 21 | []() | | |
2828
| March 22 | []() | | |
2929
| March 23 | []() | | |
@@ -42,4 +42,4 @@
4242
| --- | --- | --- | --- |
4343
| Easy | 6 | 6 | 0 |
4444
| Medium | 13 | 6 | 7 |
45-
| Hard | 0 | 0 | 0 |
45+
| Hard | 1 | 0 | 1 |

0 commit comments

Comments
 (0)