pha_huy_he_thong_dien

 avatar
SSkyFire
java
2 months ago
3.9 kB
2
Indexable
Never
Phá hủy hệ thống điện

Sau khi biết tin Eagle xây dựng hệ thống điện và ăn bớt được rất nhiều kinh phí, VenG rất tức vì khi anh xây cầu anh đã không ăn bớt được đồng nào. Do đó anh quyết phá hệ thống điện của Eagle.
Do sợ bị phát hiện nên anh sẽ chỉ phá hệ thống điện ở trên 1 hòn đào, và anh muốn tìm hòn đảo nào sau khi phá xong thì hệ thống điện của Eagle bị chia cắt thành nhiều phần nhất.

Hãy giúp anh VenG tìm hòn đảo này.

Input:
Dòng đầu tiên ghi số bộ test, không lớn hơn 100.
Mỗi bộ test được tổ chức theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên N không lớn hơn 100 là số hòn đảo.
Những dòng kế tiếp ghi lại ma trận biểu diễn hệ thong mạng lưới điện, trong đó 0 được hiểu là không có đường dây điện nối giữa điểm i và j, 1 được hiểu có đường dây điện trực tiếp giữa điểm i và điểm j (1<=i, j <= N).
Output
Với mỗi bộ test, in ra màn hình trên một dòng một số duy nhất là hòn đảo bị phá hủy hệ thống điện thỏa mãn yêu cầu bài toán (nếu có nhiều đảo cùng thỏa mãn yêu cầu thì in ra đảo có giá trị nhỏ nhất). Nếu không thể chia cắt được hệ thống điện, hãy in ra số 0.
Example
Input:
2
5
0 1 1 0 0
1 0 1 0 0
1 1 0 1 1
0 0 1 0 0
0 0 1 0 0
5
0 1 1 0 0
1 0 1 0 1
1 1 0 1 1
0 0 1 0 1
0 1 1 1 0
Output:
3
0

import java.util.Scanner;

public class Solution {
	static int N;
	static int [][]map;
	static int []visited;
	public static class Queue{
		final int MAX_SIZE = 10000000;
		int []data = new int[MAX_SIZE];
		int front;
		int rear;
		public Queue(){
			front = rear = -1;
		}
		public void init(){
			front = rear = -1;
		}
		public boolean isEmpty(){
			if(front == rear) return true;
			else return false;
		}
		public void enQueue(int element){
			rear = rear + 1;
			data[rear] = element;
		}
		public int deQueue(){
			front = front + 1;
			return data[front];
		}
	}
	
	static Queue queue;
	public static void bfs(int dao){
		queue.init();
		queue.enQueue(dao);
		visited[dao] = 1;
		while (!queue.isEmpty()) {
			int island = queue.deQueue();
			for(int i=1; i<=N; i++){
				if(map[island][i] == 1 && visited[i] == 0){
					visited[i] = 1;
					queue.enQueue(i);
				}
			}
			
		}
	}
	
	public static void resetVisit(){
		for(int i=1; i<=N; i++){
			visited[i] = 0;
		}
	}
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		queue = new Queue();
		int TC = scanner.nextInt();
		for(int t=0; t<TC; t++){
			N = scanner.nextInt();
			map = new int[N+1][N+1];
			for(int i=1; i<=N; i++){
				for(int j=1; j<=N; j++){
					map[i][j] = scanner.nextInt();
				}
			}
			visited = new int[N+1];
			int maxVung = 1;
			int index = -1;
			for(int i=1; i<=N; i++){
				for(int j=1; j<=N; j++){
					if(map[i][j] == 1){
						map[i][j] = 2;
						map[j][i] = 2;
					}			
				}
				resetVisit();
				visited[i] = 1;
				int count = 0;
				for(int k=1; k<=N; k++){
					if(visited[k] == 0){
						count++;
						bfs(k);
					}
				}
				if(count > maxVung){
					maxVung = count;
					index = i;
				}
				for(int j=1; j<=N; j++){
					if(map[i][j] == 2){
						map[i][j] = 1;
						map[j][i] = 1;
					}			
				}
			}
			if(index == -1){
				System.out.println(0);
			}
			else{
				System.out.println(index);
			}
			
			
//			for(int i=0; i<=N; i++){
//				for(int j=0; j<=N; j++){
//					System.out.print(map[i][j] + " ");
//				}
//				System.out.println();
//			}
//			System.out.println();
		}
	}
}
Leave a Comment