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 };
原文地址:https://www.cnblogs.com/amazingzoe/p/5816665.html