This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "towns.h"
#include<bits/stdc++.h>
using namespace std;
using ll = int;
#define pll pair <ll,ll>
#define fi first
#define se second
#define MP make_pair
#define sz(a) (ll((a).size()))
#define BIT(mask,i) (((mask) >> (i))&1)
#define MASK(i) (1LL << (i))
const ll MAXN = 120;
ll dist[2][MAXN];
ll sus[MAXN];
ll n;
ll get_dist(ll u,ll d[]){
ll res = 0;
for (ll i = 0;i < n;i ++){
if (i == u){
d[u] = 0;
}
else{
d[i] = getDistance(i,u);
if (d[res] < d[i])res = i;
}
}
return res;
}
int hubDistance(int N, int sub) {
n=N;
ll a = get_dist(0,dist[0]);
ll b = get_dist(a,dist[1]);
ll res = 1e9;
ll cap = (dist[0][b] + dist[1][b] + dist[0][a])/2-dist[0][b];
ll diameter = dist[1][b];
vector <ll> val;
vector <vector <ll> > path;
for (ll i = 0;i < n;i ++){
ll d = min((dist[0][i] + dist[1][i] + dist[0][a])/2-dist[0][i],cap+1);
sus[i] = (dist[0][i] + dist[1][i] + dist[0][a])/2-dist[0][a];
val.push_back(d);
}
sort(val.begin(),val.end());
val.resize(unique(val.begin(),val.end())-val.begin());
path.resize(sz(val));
for (ll i = 0;i < n;i ++){
ll d = min((dist[0][i] + dist[1][i] + dist[0][a])/2-dist[0][i],cap+1);
path[lower_bound(val.begin(),val.end(),d)-val.begin()].push_back(i);
}
vector <ll> id;
for (ll i = 0;i < sz(val);i ++){
ll bruh = max(diameter - val[i],val[i]);
if (bruh < res){
id = {i};
res = bruh;
}
else if (bruh == res)id.push_back(i);
}
// ll root = -1;
// for (auto x:id){
// ll l,r;
// l = r = 0;
// for (ll j = 0;j < x;j ++)l += sz(path[j]);
// for (ll j = x+1;j < sz(val);j ++)r += sz(path[j]);
// if (l*2>n||r*2>n)continue;
// if (sz(path[x]) * 2 > n)root = x;
// else return res;
// }
// if (root==-1)return -res;
// auto same = [&](ll x,ll y){
// return getDistance(x,y) < sus[x] + sus[y];
// };
// vector <ll> bucket;
// vector <ll> lst;
// for (auto x:path[root]){
// if (lst.empty())lst.push_back(x);
// else if (same(x,lst.back()))bucket.push_back(x);
// else {
// lst.push_back(x);
// if (sz(bucket)){
// lst.push_back(bucket.back());
// bucket.pop_back();
// }
// }
// }
// ll pp = lst.back();
// while (sz(lst)){
// if (same(pp,lst.back())){
// if (sz(lst)==1){
// bucket.push_back(lst.back());
// }
// else{
// lst.pop_back();
// lst.pop_back();
// }
// }
// else{
// lst.pop_back();
// if (sz(bucket))bucket.pop_back();
// else {
// lst.clear();
// bucket.clear();
// break;
// }
// }
// }
// ll big_comp = (sz(path[root])+sz(bucket))/2;
// if (big_comp*2>n)res = -res;
return res;
}
Compilation message (stderr)
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:30:28: warning: unused parameter 'sub' [-Wunused-parameter]
30 | int hubDistance(int N, int sub) {
| ~~~~^~~
# | 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... |