Untitled
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...