lang mac code 2
unknown
plain_text
2 years ago
1.9 kB
6
Indexable
#include <iostream>
using namespace std;
int in[305][305];
int backup[305][305];
int Qx[100000];
int r = -1, f = -1;
int n;
int visit[305];
void push(int x){
r++;
Qx[r] = x;
}
void pop(int &x){
f++;
x = Qx[f];
}
void reset_in(){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
in[i][j] = backup[i][j];
}
}
}
void reset_visit(){
for(int i = 1; i <= n; i++){
visit[i] = 0;
}
}
void BFS(int x){
r = -1;
f = -1;
push(x);
visit[x] = 1;
while (r != f){
pop(x);
for(int j = 1; j <= n; j++){
if(in[x][j] == 1 && visit[j] == 0){
push(j);
visit[j] = 1;
}
}
}
}
bool BFS_cau(int i, int j){
r = -1;
f = -1;
reset_visit();
push(i);
visit[i] = 1;
while(r != f){
pop(i);
for(int k = 1; k <= n; k++){
if(in[i][k] == 1 && visit[k] == 0){
if(k == j) {return false;}
push(k);
visit[k] = 1;
}
}
}
return true;
}
int main(){
freopen("input.txt","r",stdin);
int T;
cin >> T;
for(int tc = 1; tc <= T; tc++){
cin >> n;
reset_visit();
int lang = 0;
for(int i = 1; i <= n; i++){
int dem = 0;
for(int j = 1; j <= n; j++){
cin >> in[i][j];
backup[i][j] = in[i][j];
if (in[i][j] == 0) dem++;
}
if(dem == n) {
lang++;
visit[i] = 1;
}
}
int vung = lang;
for(int i = 1; i <= n ; i++){
if(visit[i] == 0){
BFS(i);
vung++;
}
}
// Tinh so cau
int cau = 0;
for(int i = 1; i <= n; i++){
for(int j = i; j <= n; j++){
if(backup[i][j] == 0) continue;
else{
reset_in();
in[i][j] = 0;
in[j][i] = 0;
if(BFS_cau(i,j)) cau++;
}
}
}
cout << vung << " " << lang << " " << cau << endl;
}
return 0;
}Editor is loading...