所以我們只要求乙個點在其45°角的區域內離他最近的點就行了,而這可以用線段樹或樹狀陣列解決
我們以y軸正半軸往右偏45°角的區域為例:
點j在點i的這個區域要滿足的條件是:
yj-xj>yi-xi
且xj>xi
那麼我們將點以x為第一關鍵字,y為第二關鍵字,排序後倒序插入線段樹
線段樹的線段這一維是離散後的y-x,值是y+x
我們要求的是大於yi-xi的最小的y+x,而xj>xi這個條件已經由插入順序滿足了
這樣我們成功的解決了這個區域的點
而其他區域的點我們可以通過座標變換轉移到這個區域
由於對稱性,我們注意到其實只要求x軸或y軸正半軸所在的四個區域就行了
那麼這個問題就這樣解決了
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#define fin freopen("input.txt","r",stdin);
//#define fout freopen("output.txt","w+",stdout);
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const double eps=1e-8;
const double pi=acos(-1.0);
const int n=50010;
struct point
}}//並查集初始化
void init_union_find(int n)
{ for(int i=0; i
二維曼哈頓距離最小生成樹
原理 每個點在以它為頂點的45 角範圍內,只可能連向距離 曼哈頓距離 它最近的點。證明 以點a為原點,y軸正半軸向x軸正半軸方向偏45 角為例 如圖所示,設 ab ac 所有距離都是曼哈頓距離 a 0,0 b x1,y1 c x2,y2 ab x1 y1 ac x2 y2 bc x2 x1 y2 y...
曼哈頓距離最小生成樹
一 前人種樹 部落格 曼哈頓距離最小生成樹與莫隊演算法 部落格 學習總結 最小曼哈頓距離生成樹 二 知識梳理 曼哈頓距離 給定二維平面上的n個點,在兩點之間連邊的代價。即distance p1,p2 x1 x2 y1 y2 曼哈頓距離最小生成樹問題求什麼?求使所有點連通的最小代價。最小生成樹的 環切...
51nod1213 二維曼哈頓距離最小生成樹
二維平面上有n個座標為整數的點,點x1 y1同點x2 y2之間的距離為 橫縱座標的差的絕對值之和,即 abs x1 x2 abs y1 y2 也稱曼哈頓距離 求這n個點所組成的完全圖的最小生成樹的邊權之和。input 第1行 1個數n,表示點的數量。2 n 50000 第2 n 1行 每行2個數,表...