zoukankan      html  css  js  c++  java
  • Graph Valid Tree

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.

     Notice

    You can assume that no duplicate edges will appear in edges. Since all edges are undirected[0, 1] is the same as [1, 0] and thus will not appear together in edges.

    Example

    Given n = 5 andedges = [[0, 1], [0, 2], [0, 3], [1, 4]], return true.

    Given n = 5 andedges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]], return false.

    Runtime: 213ms

     1 class Solution {
     2 public:
     3     /**
     4      * @param n an integer
     5      * @param edges a list of undirected edges
     6      * @return true if it's a valid tree, or false
     7      */
     8     bool validTree(int n, vector<vector<int>>& edges) {
     9         // Write your code here
    10         
    11         // use union find to solve this problem.
    12         // initialize the the union find array
    13         if (!n) return true;
    14         vector<int> uf;
    15         for (int i = 0; i < n; i++)
    16             uf.push_back(i);
    17         
    18         // change the parent of all pairs accordingly
    19         vector<bool> visited(n, false);
    20         for (int i = 0; i < edges.size(); i++) {
    21             if (visited[edges[i][0]] && visited[edges[i][1]] && uf[edges[i][0]] == uf[edges[i][1]]) return false;
    22             updateFather(uf, edges[i][0], edges[i][1]); // The order of these lines are important!!!
    23             visited[edges[i][0]] = true;
    24             visited[edges[i][1]] = true;
    25         }
    26         
    27         // check whether have multiple fatheres
    28         int father = uf[0];
    29         for (int i = 1; i < n; i++) {
    30             if (uf[i] != father) return false;
    31         }
    32         return true;
    33     }
    34     
    35     void updateFather(vector<int>& uf, int from, int to) {
    36         int temp = uf[to];
    37         for (int i = 0; i < uf.size(); i++) {
    38             if (uf[i] == temp) uf[i] = uf[from];
    39         }
    40     }
    41 };
  • 相关阅读:
    Life Forms POJ
    Maximum repetition substring POJ
    Extend to Palindrome UVA
    Sequence POJ
    HDU-6705 path (bfs)
    632C. The Smallest String Concatenation(注意 :stl sort函数坑点--- coredump问题 )
    2018 ICPC青岛网络赛 B. Red Black Tree(倍增lca)
    基于哈希表实现页面置换算法
    解决xpath中文乱码
    解决oh-my-zsh中git分支显示乱码问题
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/5816665.html
Copyright © 2011-2022 走看看