#include "towns.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
map<pii, int > memo;
int my_query(int f, int t) {
	if (f > t)
		swap(f, t);
	if (memo.count(pii(f, t)))
		return memo[pii(f, t)];
	return memo[pii(f, t)] = getDistance(f, t);
}
int hubDistance(int N, int sub) {
	memo.clear();
	int f1 = 0; int best_dist = -1;
	for (int i = 1; i < N; i++)
		if (my_query(0, i) > best_dist)
			best_dist = my_query(0, i), f1 = i;
	int f2 = 0;
	for (int i = 1; i < N; i++)
		if (i != f1 and my_query(f1, i) > best_dist)
			f2 = i, best_dist = my_query(f1, i);
	// try all intermediates
	int R = 1e9;
	for (int d = 0; d < N; d++) {
		if (d == f1 || d == f2)
			continue;
		int x = best_dist;
		int y = my_query(f1, d);
		int z = my_query(f2, d);
		int d1 = (x + y - z) / 2;
		int d2 = x - d1;
		R = min(R, max(d1, d2));
	}
	return R;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |