題目描述
該題的目的是要你統計圖的連通分支數。
輸入描述:
每個輸入文件包含若干行,每行兩個整數i,j,表示節點i和j之間存在一條邊。
輸出描述:
輸出每個圖的聯通分支數。
示例1
輸入
複製
1 4
4 3
5 5
輸出
複製
2
import java.util.*;
import java.io.*;
import java.text.* ;
import java.math.*;
public class Main
{
static int[] father = new int[1000010];
static boolean[] visit = new boolean[1000010];
public static void main(String[] args){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
for(int i = 0; i < 1000010; i++) father[i] = i;
String str;
while((str = br.readLine()) != null) {
String[] parts = str.split(" ");
int x = Integer.parseInt(parts[0]);
int y = Integer.parseInt(parts[1]);
visit[x] = true;
visit[y] = true;
union(x, y);
}
int res = 0;
for(int i = 0; i < 1000010; i++) {
if(!visit[i]) continue;
if(father[i] == i) res++;
}
System.out.println(res);
} catch(IOException e) {
e.printStackTrace();
}
}
public static int find(int x) {
if(x != father[x]) father[x] = find(father[x]);
return father[x];
}
public static void union(int x, int y) {
x = find(x);
y = find(y);
if(x != y) {
father[x] = y;
}
}
}