package 图论;
public class 省份数量 {
public static void main(String[] args) {
}
class Solution {
static int[] parent;
public int findCircleNum(int[][] isConnected) {
init(isConnected.length);
for(int i = 0 ;i < isConnected.length; i++){
for(int j = i + 1;j < isConnected.length; j++){
if(isConnected[i][j] == 1){
join(i,j);
}
}
}
int res = 0;
for(int i = 0;i < isConnected.length;i++){
if(parent[i] == i){ //判断有几个根 就有几个不连通的省份
res++;
}
}
return res;
}
static void init(int size){
parent = new int[size];
for(int i = 0;i < size;i++){
parent[i] = i;
}
}
static int find(int x){
if(x == parent[x]){ return x;}
else{
return parent[x] = find(parent[x]);
}
}
static boolean isSame(int x,int y){
int xx = find(x);
int yy = find(y);
return xx == yy;
}
static void join(int u,int v){
u = find(u);
v = find(v);
if(u == v){
return;
}
parent[u] = v;
}
}
}