# include <bits/stdc++.h>
typedef int ll;
using namespace std;
# define For(i , l , r) for(int i = (l); i <= (r); i++)
# define Rep(i , n) For(i , 0 , (n) - 1)
# define size(x) (ll)x.size()
# define all(x) x.begin(),x.end()
# define MAXN 8002
const ll inf = 1e9 + 7;
const ll mod = 998244353;
ll n , m , k , ans = 0 , qq , t , timer = 0;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> qq;
while (qq--) {
cin >> n;
vector g(n + 5 , vector(n + 5 , '0'));
vector dist(n + 5 , vector(n + 5 , inf));
For (i , 1 , n) {
For (j , 1 , n) {
cin >> g[i][j];
if (i == j) dist[i][j] = 0;
if (g[i][j] == '1') dist[i][j] = 1;
}
}
For (i , 1 , n) {
For (j , 1 , n) {
if (i == j) continue;
For (k , 1 , n) {
if (i == k || j == k) continue;
dist[i][j] = min(dist[i][j] , dist[i][k] + dist[k][j]);
}
}
}
// cout << 1 << endl;
vector<ll>ind(n);
Rep (i , n) ind[i] = i + 1;
random_shuffle(all(ind));
auto ind2 = ind;
random_shuffle(all(ind2));
ans = inf;
For (i , 1 , n) {
For (j , i + 1 , n) {
ll v1 = ind[i - 1] , v2 = ind[j - 1] , res = -inf;
if (v1 == v2) continue;
For (x , 1 , n) {
For (y , x + 1 , n) {
ll vx = ind2[x - 1] , vy = ind2[y - 1];
if (vx == vy) continue;
res = max(res , min({dist[vx][vy] , dist[vx][v1] + dist[v2][vy] ,
dist[vx][v2] + dist[v1][vy]}));
if (res >= ans) break;
// cout << ++timer << endl;
}
if (res >= ans) break;
}
ans = min(ans , res);
}
}
cout << ans << "\n";
}
}
/*
*/
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 | # include <bits/stdc++.h> typedef int ll; using namespace std; # define For(i , l , r) for(int i = (l); i <= (r); i++) # define Rep(i , n) For(i , 0 , (n) - 1) # define size(x) (ll)x.size() # define all(x) x.begin(),x.end() # define MAXN 8002 const ll inf = 1e9 + 7; const ll mod = 998244353; ll n , m , k , ans = 0 , qq , t , timer = 0; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> qq; while (qq--) { cin >> n; vector g(n + 5 , vector(n + 5 , '0')); vector dist(n + 5 , vector(n + 5 , inf)); For (i , 1 , n) { For (j , 1 , n) { cin >> g[i][j]; if (i == j) dist[i][j] = 0; if (g[i][j] == '1') dist[i][j] = 1; } } For (i , 1 , n) { For (j , 1 , n) { if (i == j) continue; For (k , 1 , n) { if (i == k || j == k) continue; dist[i][j] = min(dist[i][j] , dist[i][k] + dist[k][j]); } } } // cout << 1 << endl; vector<ll>ind(n); Rep (i , n) ind[i] = i + 1; random_shuffle(all(ind)); auto ind2 = ind; random_shuffle(all(ind2)); ans = inf; For (i , 1 , n) { For (j , i + 1 , n) { ll v1 = ind[i - 1] , v2 = ind[j - 1] , res = -inf; if (v1 == v2) continue; For (x , 1 , n) { For (y , x + 1 , n) { ll vx = ind2[x - 1] , vy = ind2[y - 1]; if (vx == vy) continue; res = max(res , min({dist[vx][vy] , dist[vx][v1] + dist[v2][vy] , dist[vx][v2] + dist[v1][vy]})); if (res >= ans) break; // cout << ++timer << endl; } if (res >= ans) break; } ans = min(ans , res); } } cout << ans << "\n"; } } /* */ |
English