#include <bits/stdc++.h>
#define ll long long
#define sz(x) int(x.size())
#define forn(i,n) for(i=0; i<n; i++)
#define all(x) x.begin(),x.end()
#define pb push_back
#define mp make_pair
#define fr first
#define se second
using namespace std;
int getDistance(int i, int j);
ll calc(ll x, ll d1, ll y, ll d2, vector<vector<ll>>&dis, ll N)
{
ll i, r=max(d1,d2), d;
for(i=0; i<N; i++)
{
if(x==i||y==i)
continue;
d=max(dis[x][i]-d1,dis[y][i]-d2);
r=max(d,r);
}
return r;
}
ll tam(ll x, ll d1, ll y, ll d2, vector<vector<ll>>&dis, ll N)
{
ll i, r=max(d1,d2), d, j, ac;
vector<set<ll>>un(N);
for(i=0; i<N; i++)
un[i].insert(i);
for(i=0; i<N; i++)
{
d=max(dis[x][i]-d1,dis[y][i]-d2);
for(j=0; j<N; j++)
{
if(j==i)
continue;
ac=max(dis[x][j]-d1,dis[y][j]-d2);
if(dis[i][j]-d!=ac)
{
for(auto k:un[i])
un[j].insert(k);
for(auto k:un[j])
un[i].insert(k);
}
}
}
ll ans=0;
for(i=0; i<N; i++)
ans=max(ans,1ll*sz(un[i]));
return ans;
}
int hubDistance(int N, int sub)
{
vector<vector<ll>>dis(N,vector<ll>(N,0));
vector<vector<ll>>v;
ll i, j, k, d, R=LLONG_MAX, r;
for(i=0; i<N; i++)
{
for(j=i+1; j<N; j++)
{
dis[j][i]=dis[i][j]=getDistance(i,j);
}
}
for(i=0; i<N; i++)
{
for(j=i+1; j<N; j++)
{
for(k=j+1; k<N; k++)
{
d=(dis[i][j]+dis[i][k]-dis[j][k])/2;
r=calc(i,d,j,dis[i][j]-d,dis, N);
if(R>r)
{
R=r;
v.resize(0);
v.pb({i,d,j,dis[i][j]-d});
}
}
}
}
ll mi=LLONG_MAX;
for(i=0; i<sz(v); i++)
mi=min(tam(v[i][0],v[i][1],v[i][2],v[i][3],dis,N),mi);
if(mi>N/2)
R=-R;
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... |