Untitled

 avatar
unknown
plain_text
2 years ago
1.4 kB
17
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...