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