---
# System prepended metadata

title: '[1101. The Earliest Moment When Everyone Become Friends](https://leetcode.com/problems/the-earliest-moment-when-everyone-become-friends/description/)'
tags: [leetcode]

---

---
tags: leetcode
---

# [1101. The Earliest Moment When Everyone Become Friends](https://leetcode.com/problems/the-earliest-moment-when-everyone-become-friends/description/)
---
# My Solution
## The Key Idea for Solving This Coding Question
## C++ Code
```cpp=
class UnionFind {
public:
    UnionFind(int n) {
        groups = n;
        timestamp = 0;

        root.resize(n);
        rank.resize(n, 0);
        for (int i = 0; i < n; ++i) {
            root[i] = i;
        }
    }

    int find(int x) {
        if (x == root[x]) {
            return x;
        }
        return root[x] = find(root[x]);
    }

    void unify(int x, int y, int time) {
        int rootX = find(x), rootY = find(y);

        if (rootX != rootY) {
            if (rank[rootX] < rank[rootY]) {
                root[rootX] = rootY;
            } else if (rank[rootY] < rank[rootX]) {
                root[rootY] = rootX;
            } else {
                root[rootY] = rootX;
                ++rank[rootX];
            }
            --groups;

            if (timestamp < time) {
                timestamp = time;
            }
        }
    }

    int getGroups() {
        return groups;
    }

    int getTimestamp() {
        return timestamp;
    }
private:
    int timestamp;
    int groups;

    vector<int> root;
    vector<int> rank;
};

class Solution {
public:
    int earliestAcq(vector<vector<int>> &logs, int n) {
        UnionFind uf(n);
        sort(logs.begin(), logs.end(), [](vector<int> &log1, vector<int> &log2){ return log1[0] < log2[0]; });

        for (auto &log : logs) {
            uf.unify(log[1], log[2], log[0]);
        }

        if (uf.getGroups() != 1) {
            return - 1;
        }
        return uf.getTimestamp();
    }
};
```
## Time Complexity
## Space Complexity
# Miscellaneous
<!--
# Test Cases
```
[[20190101,0,1],[20190104,3,4],[20190107,2,3],[20190211,1,5],[20190224,2,4],[20190301,0,3],[20190312,1,2],[20190322,4,5]]
6
```
```
[[0,2,0],[1,0,1],[3,0,3],[4,1,2],[7,3,1]]
4
```
* Wrong Answer
```
[[7,3,1],[2,3,0],[3,2,1],[6,0,1],[0,2,0],[4,3,2]]
4
```
* Wrong Answer
```
[[9,0,3],[0,2,7],[12,3,1],[5,5,2],[3,4,5],[1,5,0],[6,2,4],[2,5,3],[7,7,3]]
8
```
-->