上海交通大學 第一題(java)

題目描述
該題的目的是要你統計圖的連通分支數。
輸入描述:
每個輸入文件包含若干行,每行兩個整數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;
    	}
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章