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 };
  • 相关阅读:
    SQL 联合语句
    Strust2MVC
    struts2执行流程
    struts2的验证框架
    poj 1201 Intervals
    FZOJ Problem 2219 StarCraft
    poj 3470 Walls
    hdu 6021 MG loves string
    FZOJ Problem 2150 Fire Game
    FZOJ Problem 2148 Moon Game
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/5816665.html
Copyright © 2011-2022 走看看