最小點對分治法(洛谷1257)

2021-08-04 11:13:01 字數 710 閱讀 7798

題目描述

給定平面上n個點,找出其中的一對點的距離,使得在這n個點的所有點對中,該距離為所有點對中最小的

輸入樣例#1:

3

1 11 2

2 2

輸出樣例#1:

1.0000

首先我們將x座標排乙個序,然後運用分治的思想,分為兩塊,遞迴求解兩塊中的最小點對,但是兩塊的並集也可能產生點對,但是產生的條件是並集中的兩點的距離比d(d是兩塊中的最小點對)小,所以橫縱座標到中點m的距離也要小於d才能滿足要求,我們畫圖可知,最多只有六個點對應乙個點滿足要求,所以在時間複雜的上也是o(nlogn)的演算法

放上**吧~

#include#define inf 1023901200

using namespace std;

struct nodes[300000];

int t[300000];

int n;

bool cmp(node a,node b)

double dis(int a,int b)

bool comp(int a,int b)

double solve(int l,int r)

} return d; }

int main()

洛谷P3231 消毒 列舉 最小點覆蓋

給出乙個a b c 5000 a b c leq5000 a b c 5000 的立體,其中有一些方塊被打上標記,你每次可以選擇x y z x y z x y z的方塊,並且消去其中所有打上標記的點,而花費的代價是min min min,求問最少的花費把所有的標記的點全部消掉。考慮二維平面的問題,一...

洛谷 3806 模板 點分治1 點分治

題目鏈結 題意 給定一棵有n個點的樹,多次詢問樹上距離為k的點對是否存在。k 1e7。依舊點分治。注意到k的大小是可以開陣列的,對於所有出現的路徑長度用sum記錄下來,容斥去重時可以直接減掉。但是如果像上面那樣記錄的話,複雜度是o n 2 的。資料弱還是能過 注意到詢問只有100個,每次calc 可...

洛谷 P3806 模板 點分治1

this way 點分治模板 點分治解決的好像大部分是樹上路徑問題 網上模板有很多,我就不贅述了,大致思想就是找到樹的重心,然後o n 地求出路徑經過這個點的所有情況,之後再將樹以這個重心為基準分成多個子樹,再找到他們的重心,如此分治的去做。網上的 各不相同,我找了同集訓隊的人的寫法,用set維護每...