Skip to content

Commit 86f8625

Browse files
committed
feat: 2092. Find All People With Secret : 并查集
1 parent e0df202 commit 86f8625

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
function findAllPeople(n: number, meetings: number[][], firstPerson: number): number[] {
2+
const fa = [...Array(n)].map((_, idx) => idx)
3+
const get = (x: number): number => {
4+
if (x === fa[x]) return x
5+
return fa[x] = get(fa[x])
6+
}
7+
const merge = (x: number, y: number) => {
8+
let fx = get(x); let fy = get(y)
9+
// 优先让 0 做根节点
10+
if (fx === 0) [fx, fy] = [fy, fx]
11+
fa[fx] = fy
12+
}
13+
meetings.sort((a, b) => a[2] - b[2])
14+
const m = meetings.length
15+
merge(0, firstPerson)
16+
for (let i = 0; i < m; ) {
17+
let time = meetings[i][2]
18+
let j = i
19+
while (j < m && meetings[j][2] === time) {
20+
merge(meetings[j][0], meetings[j][1])
21+
j++
22+
}
23+
for (let k = i; k < j; k++) {
24+
const [a, b] = meetings[k]
25+
if (get(a) !== 0) fa[a] = a
26+
if (get(b) !== 0) fa[b] = b
27+
}
28+
i = j
29+
}
30+
const ans = [0]
31+
for (let i = 1; i < n; i++) {
32+
if (get(i) === get(0)) ans.push(i)
33+
}
34+
return ans
35+
};

leetcode/残酷刷题/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@
108108
### 并查集
109109

110110
- 1627. Graph Connectivity With Threshold
111+
- 2092. Find All People With Secret
112+
- 并查集,宽搜都可以做
111113

112114
#### 时光倒流
113115

0 commit comments

Comments
 (0)