Skip to content

Commit 477c317

Browse files
committed
2021-03-10
1 parent db1db7d commit 477c317

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution(object):
2+
def unhappyFriends(self, n, preferences, pairs):
3+
"""
4+
:type n: int
5+
:type preferences: List[List[int]]
6+
:type pairs: List[List[int]]
7+
:rtype: int
8+
"""
9+
# 建立亲密度矩阵,prefer_degrees[i][j]即为 i 对 j 的亲密度
10+
prefer_degrees = [[-n-1 for _ in range(n)] for _ in range(n)]
11+
for i, preference in enumerate(preferences):
12+
for degree, j in enumerate(preference):
13+
prefer_degrees[i][j] = -degree
14+
15+
# 建立配对字典,给定x, ppl2friends[x]即为 x 分配的朋友
16+
ppl2friends = dict()
17+
for x, y in pairs:
18+
ppl2friends[x] = y
19+
ppl2friends[y] = x
20+
21+
def isUnhappy(x):
22+
# 判定 x 是否快乐
23+
y = ppl2friends[x]
24+
25+
for u in range(n):
26+
v = ppl2friends[u]
27+
if x != u and prefer_degrees[x][u] > prefer_degrees[x][y] and \
28+
prefer_degrees[u][x] > prefer_degrees[u][v]:
29+
return 1
30+
return 0
31+
32+
return sum([isUnhappy(i) for i in range(n)])
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
2+
class UnionFindSet(object):
3+
def __init__(self, n):
4+
# m, n = len(grid), len(grid[0])
5+
self.roots = [i for i in range(n + 1)]
6+
self.rank = [0 for i in range(n + 1)]
7+
self.count = n
8+
9+
def find(self, member):
10+
tmp = []
11+
while member != self.roots[member]:
12+
tmp.append(member)
13+
member = self.roots[member]
14+
for root in tmp:
15+
self.roots[root] = member
16+
return member
17+
18+
def union(self, p, q):
19+
parentP = self.find(p)
20+
parentQ = self.find(q)
21+
if parentP != parentQ:
22+
if self.rank[parentP] > self.rank[parentQ]:
23+
self.roots[parentQ] = parentP
24+
elif self.rank[parentP] < self.rank[parentQ]:
25+
self.roots[parentP] = parentQ
26+
else:
27+
self.roots[parentQ] = parentP
28+
self.rank[parentP] -= 1
29+
self.count -= 1
30+
31+
class Solution(object):
32+
def minCostConnectPoints(self, points):
33+
"""
34+
:type points: List[List[int]]
35+
:rtype: int
36+
"""
37+
from heapq import *
38+
queue = []
39+
res = 0
40+
n = len(points)
41+
for i in range(n):
42+
for j in range(i + 1, n):
43+
d = abs(points[i][0] - points[j][0]) + abs(points[i][1] - points[j][1])
44+
heappush(queue, (d, i, j))
45+
46+
ufs = UnionFindSet(n)
47+
while ufs.count > 1:
48+
d, i, j = heappop(queue)
49+
50+
if ufs.find(i) != ufs.find(j):
51+
res += d
52+
ufs.union(i, j)
53+
54+
return res

0 commit comments

Comments
 (0)