village

 avatar
unknown
plain_text
2 years ago
1.7 kB
7
Indexable
package practise;
import java.util.Scanner;

public class village {
	
	static int bound, iso, n;
	static boolean[] visit;
	
	private static int checkBridge(int[][] road, int n){
		boolean[] checked = new boolean[n];
		int result = 0;
		for(int i = 0; i < n; i++){
			if(!checked[i]){
				int count = 0, x = 0, y = 0;
				boolean isIso = true;
				for(int j = 0; j < n; j++){
					if(road[i][j] == 1){
						count++;
						x = i; y = j;
						isIso = false;
					}
				}
				
				if(isIso) iso++;
				
				if(count == 1){
					checked[y] = true;
					result++;
				}
			}
		}
		return result;
	}
	
	private static void check(int[][] road, int x) {
		visit[x] = true;
		for(int i = 0; i < n; i++) {
			if(road[x][i] == 1) {
				if(!visit[i]) {
					check(road, i);
				}
			}
		}
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 0; tc <= testcase; tc++){
			n = sc.nextInt();
			int[][] road = new int[n][n];
			for(int i = 0; i < n; i++){
				for(int j = 0; j < n; j++){
					road[i][j] = sc.nextInt();
				}
			}
			
			//kiem tra cau + iso
			iso = 0;
			int bridge = checkBridge(road, n); 
//			int bridgee = 0;
			visit = new boolean[n];
			bound = 0;
			for(int i = 0; i < n; i++){
				for(int j = i; j < n; j++){
					if(road[i][j] == 1){
						if(!visit[i]) {
							bound++;
							visit[i] = true;
						}
						if(!visit[j])
						check(road, j);
					}
				}
			}
			iso = 0;
			for(int i = 0; i < n; i++) {
				if(!visit[i]) iso++;
			}
			
			System.out.println((bound + iso)+ " " + iso + " " + bridge);
		}
	}
}
Editor is loading...