Skip to content

Commit d7f3b82

Browse files
authored
Create 2092. Find All People With Secret 1 (#963)
2 parents a93b9a9 + e4e9a17 commit d7f3b82

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Solution {
2+
public:
3+
4+
vector<int> findAllPeople(int n, vector<vector<int>>& meetings, int firstPerson) {
5+
sort(meetings.begin(), meetings.end(), [](vector<int>&a,vector<int>&b){
6+
return a[2]<b[2];
7+
});
8+
vector<int>par(n);
9+
for(int i=0;i<n;i++){
10+
par[i]=i;
11+
}
12+
par[firstPerson]=0;
13+
function<int(int)> find=[&](int a){
14+
if(par[a]==a)return a;
15+
else return par[a]=find(par[a]);
16+
};
17+
function<void(int,int b)> union_=[&](int a,int b){
18+
if(a>b){ swap(a,b);}
19+
int A=find(a);
20+
int B=find(b);
21+
if(A<B){
22+
par[B]=A;
23+
}else if(B<A){
24+
par[A]=B;
25+
}
26+
27+
};
28+
29+
for(int i=0;i<meetings.size();i++){
30+
int j=i;
31+
for(;j<meetings.size()&&meetings[i][2]==meetings[j][2];j++){
32+
union_(meetings[j][0],meetings[j][1]);
33+
}
34+
for(int k=i;k<j;k++){
35+
if(find(meetings[k][0])!=0)par[meetings[k][0]]=meetings[k][0];
36+
if(find(meetings[k][1])!=0)par[meetings[k][1]]=meetings[k][1];
37+
}
38+
i=j-1;
39+
}
40+
vector<int> ans;
41+
for(int i=0;i<n;i++){
42+
if(par[i]==0)ans.push_back(i);
43+
}
44+
return ans;
45+
46+
}
47+
};

0 commit comments

Comments
 (0)