#include "towns.h"
#include <bits/stdc++.h>
#define REP(v, i, j) for (int v = i; v != j; v++)
#define FORI(v) for (auto i : v)
#define FORJ(v) for (auto j : v)
#define OUT(v, a) \
    FORI(v)       \
    cout << i << a;
#define OUTS(v, a, b)      \
    cout << v.size() << a; \
    OUT(v, b)
#define in(a, n) \
    REP(i, 0, n) \
    cin >> a[i];
#define SORT(v) sort(begin(v), end(v))
#define REV(v) reverse(begin(v), end(v))
#define MEMSET(m) memset(m, -1, sizeof m)
#define pb push_back
#define fi first
#define se second
#define detachIO                      \
    ios_base::sync_with_stdio(false); \
    cin.tie(0);                       \
    cout.tie(0);
    
using namespace std;
int cache[200][200];
int query(int x, int y){
	if(cache[x][y]!=-1)return cache[x][y];
;	return cache[x][y]=cache[y][x]=getDistance(x,y);
}
int hubDistance(int N, int sub) {
	MEMSET(cache);
	int f = 1;
	int d=query(0,f);
	REP(i,2,N){
		int t=query(0,i);
		if(t>d)f=i,d=t;
	}
	int g = 0;
	d=query(g,f);
	REP(i,1,N){
		if(i==f)continue;
		int t=query(f,i);
		if(t>d)g=i,d=t;
	}
	int ans=query(f,g);
	// cerr<<f<<" - "<<g<<endl;
	REP(i,0,N){
		int off = (query(i,f) + query(i,g) - query(g,f)) / 2;
		// cerr<<query(i,f)<<" "<<query(i,g)<<" "<<query(g,f)<<" "<<off<<" -> "<<max(query(i,f),query(i,g))-off<<endl;
		ans=min(ans,max(query(i,f),query(i,g))-off);
	}
	// cerr<<"ANS: "<<ans<<endl;
	return ans;
}
| # | 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... |