제출 #16575

#제출 시각아이디문제언어결과실행 시간메모리
16575gs14004도시들 (IOI15_towns)C++14
0 / 100
1000 ms1344 KiB
#include "towns.h" #include <cstring> #include <algorithm> #include <stack> #include <vector> using namespace std; typedef pair<int,int> pi; int dp[150][150]; int dist(int s, int e){ if(s == e) return 0; if(s > e) swap(s,e); if(~dp[s][e]) return dp[s][e]; return dp[s][e] = getDistance(s, e); } vector<pi> v; int p, q, val; bool diff(int s, int e){ return (val + dist(s, e)) == dist(s, p) + dist(q, e); } stack<int> stk; struct disj{ int pa[111], sz[111]; void init(int n){ for(int i=0; i<=n; i++) pa[i] = i, sz[i] = 1; } int find(int x){ return pa[x] = (pa[x] == x ? x : find(pa[x])); } void uni(int p, int q){ p = find(p), q = find(q); if(p == q) return; pa[q] = p; sz[p] += sz[q]; } }disj; int solve(int s, int e){ return e - s + 1; disj.init(110); while(!stk.empty()) stk.pop(); for(int i=s; i<=e; i++){ for(int j=i+1; j<=e; j++){ if(!diff(v[i].second, v[j].second)){ disj.uni(v[i].second, v[j].second); } } } return *max_element(disj.sz, disj.sz+111); } int hubDistance(int N, int sub) { v.clear(); memset(dp,-1,sizeof(dp)); p = -1, val = -1, q = -1; for(int i=1; i<N; i++){ if(val < dist(0, i)){ val = dist(0, i); p = i; } } val = -1; for(int i=0; i<N; i++){ if(val < dist(p, i)){ val = dist(p, i); q = i; } } for(int i=0; i<N; i++){ int fl = dist(p, i) - dist(q, i) + val; v.push_back(pi(fl / 2, i)); } sort(v.begin(), v.end()); int R = val; int hmin = 1e9; for(int i=0; i<v.size(); ){ int e = i; while(e < v.size() && v[e].first == v[i].first) e++; int tmp = max(val - v[i].first, v[i].first); if(R < tmp) continue; if(R > tmp){ R = tmp; hmin = 1e9; } int hub = max(solve(i, e-1), max(i, (int)v.size() - e)); hmin = min(hmin, hub); i = e; } if(hmin > N / 2) return -R; return R; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...