/* * O(n^3) solution checking each distance to see if it is greater than or equal to the * sum of two distances. Should be too slow on trees with small diameter. */ #include #include using namespace std; typedef long long ll; typedef vector vi; typedef vector vvi; int main() { ll n; cin >> n; vvi adj_matrix(n, vi(n)); for (ll i = 0; i < n; ++i) { for (ll j = 0; j < n; ++j) { cin >> adj_matrix[i][j]; } } for (ll i = 0; i < n; ++i) { for (ll j = i+1; j < n; ++j) { bool success = true; for (ll k = 0; k < n; ++k) { if (k == i || k == j) continue; if (adj_matrix[i][j] >= adj_matrix[i][k] + adj_matrix[k][j]) { success = false; break; } } if (success) { cout << i+1 << " " << j+1 << endl; } } } }