二維曼哈頓最小生成樹

2022-04-27 11:15:09 字數 998 閱讀 2944

所以我們只要求乙個點在其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個數,表...