Untitled

 avatar
unknown
plain_text
2 years ago
3.1 kB
4
Indexable
package LangMac;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Solution {
	static int n;
	static int[][] a;
	static int[] visit;
	static int[] d;
	static int[][] chuaxet;
	static int[][] b;
	static int[] parent;
	
	public static void main(String[] args) throws FileNotFoundException  {
		System.setIn(new FileInputStream("src/LangMac/input.txt"));
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for(int test_case = 1; test_case <= T; test_case++){
			n = sc.nextInt();
			a = new int[n][n];
			visit = new int[n];
			d = new int[n];
			parent = new int[n];
			chuaxet = new int[n][n];
			b = new int[n][n];
			for(int i = 0; i < n; i++){
				for(int j = 0; j < n; j++){
					a[i][j] = sc.nextInt();
				}
			}
			
			int codon = 0, vung = 0, cau = 0;
			
			for(int i = 0; i < n; i++){
				if(visit[i] == 0){
					int tmp = bfs(i);
					vung++;
					if(tmp == 1) codon++;
				}
			}
			
			for(int i = 0; i < n; i++){
				parent[i] = -1;
				visit[i] = 0;
			}
			
			for(int i = 0; i < n; i++){
				if(visit[i] == 0){
					dfs(i);
				}
			}
			
			for(int i = 0; i < n; i++){
				visit[i] = 0;
			}
			
			for(int i = 0; i < n; i++){
				for(int j = 0; j < n; j++){
					if(a[i][j] == 1 && chuaxet[i][j] == 0 && b[i][j] != 1){
						chuaxet[i][j] = 1;
						chuaxet[j][i] = 1;
						int vu = 0;
						a[i][j] = 0;
						a[j][i] = 0;
						for(int i2 = 0; i2 < n; i2++){
							if(visit[i2] == 0){
								int tmp = bfs(i2);
								vu++;
							}
						}
						if(vu > vung) cau++;
						for(int i1 = 0; i1 < n; i1++){
							visit[i1] = 0;
						}
						a[i][j] = 1;
						a[j][i] = 1;
					}
				}
			}
			System.out.println(vung + " " + codon + " " + cau);
		}
	}
	
	public static int bfs(int u){
		int[] q = new int[305*305];
		int v = 0;
		int l = 0, r = 0;
		q[r++] = u; 
		visit[u] = 1;
		while(l < r){
			int x = q[l]; l++;
			v++;
			for(int i = 0; i < n; i++){
				if(a[x][i] == 1 && visit[i] == 0){
					visit[i] = 1;
					q[r++] = i; 
				}
			}
		}
		return v;
	}
	
	public static void dfs(int k){
		visit[k] = 1;
		for(int i = 0; i < n; i++){
			if(a[k][i] == 1 && visit[i] == 0){
				parent[i] = k;
				dfs(i);
			}else if(a[k][i] == 1 && visit[i] == 1 && i != parent[k]){
				b[i][k] = 1;
				b[k][i] = 1;
				int p = k;
				while(p != i){
					b[p][parent[p]] = 1;
					b[parent[p]][p] = 1;
					p = parent[p];
				}
			}
		}
		visit[k] = 2;
	}
	
	public static boolean check(int u){
		for(int i = 0; i < n; i++){
			for(int j = 0; j < n; j++){
				if(i != j && a[i][j] != u){
					return false;
				}
			}
		}
		return true;
	}
	
	public static boolean checkturn(){
		for(int i = 0; i < n; i++){
			if(a[i][i] != 0){
				return false;
			}
		}
		return true;
	}
	
	public static boolean check(){
		for(int i = 0; i < n; i++){
			if(visit[i] == 0){
				return false;
			}
		}
		return true;
	}
}
Editor is loading...