美文网首页
[2018-10-07] [LeetCode-Week5] 68

[2018-10-07] [LeetCode-Week5] 68

作者: YuhiDiary | 来源:发表于2018-10-07 20:02 被阅读0次

    https://leetcode.com/problems/redundant-connection/description/


    In this problem, a tree is an undirected graph that is connected and has no cycles.

    The given input is a graph that started as a tree with N nodes (with distinct values 1, 2, ..., N), with one additional edge added. The added edge has two different vertices chosen from 1 to N, and was not an edge that already existed.

    The resulting graph is given as a 2D-array of edges. Each element of edges is a pair [u, v] with u < v, that represents an undirected edge connecting nodes u and v.

    Return an edge that can be removed so that the resulting graph is a tree of N nodes. If there are multiple answers, return the answer that occurs last in the given 2D-array. The answer edge [u, v] should be in the same format, with u < v.

    Example 1:
    Input: [[1,2], [1,3], [2,3]]
    Output: [2,3]
    Explanation: The given undirected graph will be like this:
    1
    /
    2 - 3
    Example 2:
    Input: [[1,2], [2,3], [3,4], [1,4], [1,5]]
    Output: [1,4]
    Explanation: The given undirected graph will be like this:
    5 - 1 - 2
    | |
    4 - 3
    Note:
    The size of the input 2D-array will be between 3 and 1000.
    Every integer represented in the 2D-array will be between 1 and N, where N is the size of the input array.


    显然是个并查集的题。
    直接初始化并查集,每碰到一条边合并集合即可。


    class Solution {
    public:
        int fa[1005];
        
        bool unionTest(int u, int v) {
            while (fa[u] != u) u = fa[u];
            while (fa[v] != v) v = fa[v];
            
            if (u != v) {
                fa[v] = u;
                return false;
            } else {
                return true;
            }
        }
        
        vector<int> findRedundantConnection(vector<vector<int>>& edges) {
            int n = edges.size();
            int ansu, ansv;
            
            ansu = ansv = 0;
            for (int i = 1; i <= n; i++) {
                fa[i] = i;
            }
            
            for (int i = 0; i < n; i++) {
                int u = edges[i][0];
                int v = edges[i][1];
                
                if (unionTest(u, v)) {
                    ansu = u;
                    ansv = v;
                }
            }
            
            vector<int> ans;
            ans.push_back(ansu);
            ans.push_back(ansv);
            return ans;
        }
    };
    

    相关文章

      网友评论

          本文标题:[2018-10-07] [LeetCode-Week5] 68

          本文链接:https://www.haomeiwen.com/subject/fyhraftx.html