#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
vector<vector<int>> dists;
int n;
const int inf = 10000;
void doWarshall(){
for(int k = 0; k<n; k++){
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
dists[i][j] = min(dists[i][j], dists[i][k] + dists[k][j]);
}
}
}
}
void solve(){
srand(time(NULL));
cin>>n;
dists.assign(n, vector<int>(n));
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
char a;
cin>>a;
dists[i][j] = a - '0';
if(dists[i][j] == 0 and i != j) dists[i][j] = inf;
}
}
int bestWithout = 0;
doWarshall();
for(int i = 0; i<n; i++){
for(int j = i+1; j<n; j++){
bestWithout = max(bestWithout, dists[i][j]);
}
}
int out = bestWithout;
for(int i = 0; i<n; i++){
for(int j = i+1; j<n; j++){
bool isgood = true;
int tmp = 0;
for(int k = 0; k<n; k++){
for(int l = k+1; l < n; l++){
int v1 = k;
int v2 = l;
int tt = min(dists[v1][i] + dists[j][v2], dists[v1][j] + dists[i][v2]);
tt = min(tt, dists[v1][v2]);
tmp = max(tmp, tt);
if(tmp >= out){
isgood = false;
break;
}
}
if(!isgood) break;
}
out = min(out, tmp);
}
}
cout<<out<<endl;
}
int main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
int t;
cin>>t;
while(t--) solve();
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 79 80 | #include <bits/stdc++.h> #pragma GCC optimize("O2") using namespace std; vector<vector<int>> dists; int n; const int inf = 10000; void doWarshall(){ for(int k = 0; k<n; k++){ for(int i = 0; i<n; i++){ for(int j = 0; j<n; j++){ dists[i][j] = min(dists[i][j], dists[i][k] + dists[k][j]); } } } } void solve(){ srand(time(NULL)); cin>>n; dists.assign(n, vector<int>(n)); for(int i = 0; i<n; i++){ for(int j = 0; j<n; j++){ char a; cin>>a; dists[i][j] = a - '0'; if(dists[i][j] == 0 and i != j) dists[i][j] = inf; } } int bestWithout = 0; doWarshall(); for(int i = 0; i<n; i++){ for(int j = i+1; j<n; j++){ bestWithout = max(bestWithout, dists[i][j]); } } int out = bestWithout; for(int i = 0; i<n; i++){ for(int j = i+1; j<n; j++){ bool isgood = true; int tmp = 0; for(int k = 0; k<n; k++){ for(int l = k+1; l < n; l++){ int v1 = k; int v2 = l; int tt = min(dists[v1][i] + dists[j][v2], dists[v1][j] + dists[i][v2]); tt = min(tt, dists[v1][v2]); tmp = max(tmp, tt); if(tmp >= out){ isgood = false; break; } } if(!isgood) break; } out = min(out, tmp); } } cout<<out<<endl; } int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int t; cin>>t; while(t--) solve(); return 0; } |
English