lang mac code 2
unknown
plain_text
2 years ago
1.9 kB
5
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...