#include <bits/stdc++.h> using namespace std; #define vec_2d vector< vector< int > > typedef long long ll; const int INF = 1'000; int T; vector< int > answer; int x, y; int FW(int N, vec_2d dp){ for(int k = 0; k < N; k++){ for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(dp[i][j] > dp[i][k]+dp[k][j]){ dp[i][j] = dp[i][k]+dp[k][j]; } } } } int Max = 0; for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(dp[i][j] >= Max){ Max = dp[i][j]; x = i, y = j; } } } return Max; } void solve(){ int N; cin >> N; vec_2d vec(N); vec_2d dp(N, vector<int>(N)); for(int i = 0; i < N; i++){ string s; cin >> s; for(int j = 0; j < N; j++){ dp[i][j] = INF; int a = s[j]-'0'; if(a == 1){ vec[i].push_back(j); vec[j].push_back(i); dp[i][j] = 1, dp[j][i] = 1; } } dp[i][i] = 0; } int Max = FW(N, dp); for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ dp[i][j] = INF; } for(auto j : vec[i]){ dp[i][j] = 1; } dp[i][i] = 0; } dp[y][x] = 0; dp[x][y] = 0; Max = FW(N, dp); answer.push_back(Max); return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int T; cin >> T; for(int t = 0; t < T; t++){ solve(); } for(int t = 0; t < T; t++){ cout << answer[t] << "\n"; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <bits/stdc++.h> using namespace std; #define vec_2d vector< vector< int > > typedef long long ll; const int INF = 1'000; int T; vector< int > answer; int x, y; int FW(int N, vec_2d dp){ for(int k = 0; k < N; k++){ for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(dp[i][j] > dp[i][k]+dp[k][j]){ dp[i][j] = dp[i][k]+dp[k][j]; } } } } int Max = 0; for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(dp[i][j] >= Max){ Max = dp[i][j]; x = i, y = j; } } } return Max; } void solve(){ int N; cin >> N; vec_2d vec(N); vec_2d dp(N, vector<int>(N)); for(int i = 0; i < N; i++){ string s; cin >> s; for(int j = 0; j < N; j++){ dp[i][j] = INF; int a = s[j]-'0'; if(a == 1){ vec[i].push_back(j); vec[j].push_back(i); dp[i][j] = 1, dp[j][i] = 1; } } dp[i][i] = 0; } int Max = FW(N, dp); for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ dp[i][j] = INF; } for(auto j : vec[i]){ dp[i][j] = 1; } dp[i][i] = 0; } dp[y][x] = 0; dp[x][y] = 0; Max = FW(N, dp); answer.push_back(Max); return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int T; cin >> T; for(int t = 0; t < T; t++){ solve(); } for(int t = 0; t < T; t++){ cout << answer[t] << "\n"; } return 0; } |