问题描述
解题报告
实现代码
class Solution {
public:
static bool cmp(vector<int>& a, vector<int>& b)
{
return a[0]<b[0];
}
void dfs(map<int,vector<int>>& tmp, int num, vector<int>& flag, vector<int>& ans)
{
if(flag[num])
{
flag[num]=0;
ans.push_back(num);
auto vec=tmp[num];
for(auto it:vec)
{
dfs(tmp,it,flag,ans);
}
}
}
int earliestAcq(vector<vector<int>>& logs, int N)
{
int m=logs.size();
sort(logs.begin(),logs.end(),cmp);
map<int,vector<int>> tmp;
for(auto it:logs)
{
tmp[it[1]].push_back(it[2]);
tmp[it[2]].push_back(it[1]);
vector<int> flag(N,1);
vector<int> ans;
if(flag[it[1]]){
dfs(tmp,it[1],flag,ans);
}
if(ans.size()==N)
{
return it[0];
}
}
return -1;
}
};
class Solution {
public:
int earliestAcq(vector<vector<int>>& logs, int N) {
for (auto person = 0; person < N; person++) {
friend_ships.emplace_back(person);
}
sort(logs.begin(), logs.end(), [&](const vector<int> &v1, const vector<int> &v2)->bool
{
return v1[0] < v2[0];
});
for (const auto &log : logs) {
merge(log[1], log[2]);
vector<int> person_friends(N, 0);
for (auto person = 0; person < N; person++) {
auto r_person = find(person);
person_friends[r_person]++;
if (person_friends[r_person] >= N) {
return log[0];
}
}
}
return -1;
}
private:
int find(int person)
{
if (friend_ships[person] == person) {
return person;
}
return find(friend_ships[person]);
}
void merge(int person_a, int person_b)
{
int r_person_a = find(person_a);
int r_person_b = find(person_b);
friend_ships[r_person_a] = r_person_b;
}
private:
vector<int> friend_ships;
};