File tree Expand file tree Collapse file tree 2 files changed +86
-0
lines changed Expand file tree Collapse file tree 2 files changed +86
-0
lines changed Original file line number Diff line number Diff line change
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 )])
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments