Untitled
unknown
plain_text
2 years ago
1.7 kB
6
Indexable
#include<iostream>
using namespace std;
int start, rear;
int ke[305][305];
int countt[305];
int queue[90005];
int visited[305];
int n;
int vung, colap, cau;
void timvung(int u){
while(start!=rear){
int x = queue[start];
start++;
for(int i=0; i<countt[x]; i++){
if(visited[ke[x][i]]==0){
queue[rear]=ke[x][i];
rear++;
visited[ke[x][i]]=1;
}
}
}
}
int timcau(int dau, int cuoi){
while(start!=rear){
int x = queue[start];
start++;
for(int i=0; i<countt[x]; i++){
if(ke[x][i]!=-1){
if(ke[x][i]==cuoi) return 0;
if(visited[ke[x][i]]==0){
queue[rear]=ke[x][i];
rear++;
visited[ke[x][i]]=1;
}
}
}
}
return 1;
}
int main(){
// freopen("in.txt", "r", stdin);
int t;
cin>>t;
for(int tc=1; tc<=t; tc++){
cin>>n;
vung=0;
colap=0;
cau=0;
for(int i=0; i<n; i++){
countt[i]=0;
visited[i]=0;
}
int x;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin>>x;
if(x==1) {
ke[i][countt[i]++] = j;
}
}
}
for(int i=0; i<n; i++){
if(countt[i]==0) colap++;
}
for(int i=0; i<n; i++){
start=0; rear=1;
queue[0] = i;
if(visited[i]==0){
timvung(i);
vung++;
}
}
for(int i=0; i<n; i++) visited[i]=0;
for(int i=0; i<n; i++){
for(int j = 0; j<countt[i]; j++){
start=0; rear=1;
queue[0] = i;
int h = ke[i][j];
int q;
for(int z=0; z<countt[h]; z++){
if(ke[h][z]==i){
q = z;
}
}
ke[i][j] = -1;
ke[h][q]=-1;
cau+= timcau(i, h);
ke[i][j]=h;
ke[h][q]=i;
for(int z=0; z<n; z++) visited[z]=0;
}
}
cout<<vung<<" "<<colap<<" "<<cau/2<<endl;
}
return 0;
}Editor is loading...