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