Given n nodes labeled 0 to n-1 and a list of undirected edges, determine whether these edges form a valid tree. A valid tree has exactly n-1 edges and is fully connected with no cycles.

Input: n=5, edges=[[0,1],[0,2],[0,3],[1,4]] → Output: trueInput: n=5, edges=[[0,1],[1,2],[2,3],[1,3],[1,4]] → Output: false

A valid tree must have exactly n-1 edges AND be connected. Use Union-Find: if any edge creates a cycle (both nodes already connected), return false.

class Solution { int[] parent; public boolean validTree(int n, int[][] edges) { if (edges.length != n - 1) return false; parent = new int[n]; for (int i = 0; i < n; i++) parent[i] = i; for (int[] e : edges) { int pu = find(e[0]), pv = find(e[1]); if (pu == pv) return false; parent[pu] = pv; } return true; } private int find(int x) { return parent[x]==x?x:(parent[x]=find(parent[x])); } }