--- title: 1319. Number of Operations to Make Network Connected tags: graph description: share source code. --- # 1319. Number of Operations to Make Network Connected ```java= class Solution { static class UnionFind{ int root []; int rank []; int component; public UnionFind(int n){ this.root = new int [n]; this.rank = new int [n]; this.component = n; for(int i = 0; i < n; i++){ root [i] = i; rank [i] = 1; } } public boolean isConnected(int u, int v){ return find(u) == find(v); } public void merge(int u, int v){ int pu = find(u); int pv = find(v); if(rank[pu] < rank[pv]){ root [pu] = pv; }else if(rank[pu] > rank[pv]){ root [pv] = pu; }else{ root [pv] = pu; rank [pu]++; } component--; } public int find(int u){ while(u != root[u]){ root[u] = root[root[u]]; u = root[u]; } return u; } } public int makeConnected(int n, int[][] connections) { UnionFind uf = new UnionFind(n); int redundant = 0; for(int [] connection: connections){ if(!uf.isConnected(connection[0], connection[1])){ uf.merge(connection[0], connection[1]); }else{ redundant++; } } //System.out.println(uf.component); int op = (uf.component - 1) - redundant; return op > 0 ? -1 : uf.component - 1; } } ```