Untitled
unknown
plain_text
2 years ago
3.1 kB
5
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...