Untitled
unknown
plain_text
2 years ago
1.4 kB
18
Indexable
#include<iostream>
using namespace std;
int a[301][301];
int vs[301];
int qx[100000];
int qy[100000];
int f=-1;
int r=-1;
int n;
void push( int x)
{
r++;
qx[r]=x;
}
void pop(int &x)
{
f++;
x=qx[f];
}
bool BFS(int x,int yy)
{
r=-1;
f=-1;
for(int i=1;i<=n;i++)vs[i]=0;
push(x);
vs[x]=1;
while(r!=f){
pop(x);
for(int y=1;y<=n;y++){
if(a[x][y]==1 && vs[y]==0){
push(y);
vs[y]=1;
if(yy==y)return true;
}
}
}
return false;
}
void BFS2(int x)
{
r=-1;
f=-1;
push(x);
vs[x]=1;
while(r!=f){
pop(x);
for(int y=1;y<=n;y++){
if(a[x][y]==1 && vs[y]==0){
push(y);
vs[y]=1;
}
}
}
}
int main()
{
freopen("input.txt", "r", stdin);
int T; cin >>T;
for(int tc=1; tc<=T; tc++){
cin >>n;
int ans1=0;
for(int i=1;i<=n;i++){
int dem=0;
for(int j=1; j<=n;j++){
cin >> a[i][j];
if(a[i][j]==0) dem++;
}
if(dem==n) ans1++;
}
//tinh so vung
int ans=0;
for(int i=1;i<=n;i++)vs[i]=0;
for(int i=1;i<=n;i++){
if(vs[i]==0){
ans++;
BFS2(i);
}
}
//tinh so cau
int ans2=0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i][j]==1){
a[i][j]=0;
a[j][i]=0;
if(!BFS(i,j))ans2++;
a[i][j]=1;
a[j][i]=1;
}
}
}
//cout<< ans2<< endl;
cout <<ans<<" "<<ans1<<" " << ans2<< endl;
}
return 0;
}Editor is loading...