Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 477c317

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /