10 22T1 二分 並查集

2022-05-01 18:30:08 字數 1569 閱讀 4020

朝比奈實 玖 瑠 ,使用tpdd進行時間穿行的未來人。

由於這項技術過於暴力 (簡單來說就是在時間平面上打洞),加之春日帶來的資訊**

使得堆疊的時間平面徹底截斷,導致實玖瑠進行穿行需要冒一定的風險。

複雜的時間穿行過程可以抽象為從平面x軸的正無窮遠處走向負無窮遠。tpdd的功率顯然是有限的,所以實玖瑠只能夠在平面y= 的直線與x軸所夾的部分裡移動。tpdd的移動方式非常的怪異,它會生成乙個直徑為 的圓來保護使用者,並且從正無窮遠處向負無窮遠處移動,直徑越大,能量越足,移動速度也就最快。但是,時間穿行的風險就在於時間平面上有許多特異點,一旦被捲入其中,就再也不能回到原來的時間點。在從正無窮遠走向負無窮遠的過程中,圓可以任意的移動,但是不能碰到特異點和越過邊界。

實玖瑠已經了解到,在她將要進行移動的部分平面上,有n個特異點,第i個點的座標是xi,yi 。為了能夠在保證安全的情況下盡快完成時間穿行,她需要設定盡量大的直徑 。

但是1096只是乙個萌物,這樣的問題對她來說太困難了,所以請你幫幫她吧!

輸入檔案共n+1行。

第一行包括兩個整數n,l 。

接下來n行,每行兩個整數xi,yi

輸出檔案僅一行,表示最大的直徑。為了防止精度誤差,請輸出保留三位小數的結果。

1 52 2

3.000

【輸入輸出樣例1說明】

顯然可以發現,從唯一乙個特異點靠l的方向可以通過直徑為3的圓

【資料規模與約定】

對於 30% 的資料,n<=3 。

對於 60% 的資料,n<=80 。

對於 100% 的資料,1<=n<=500,1<=yi

二分圓的大小,把兩點以及到邊緣小於這個距離的合併,如果上下界合併在了一起顯然就沒有路徑

code:

1 #include2 #include3 #include4 #include5

#define n 100006

6using

namespace

std;

7double eps=1e-6;8

intfa[n];

9struct

node e[n];

12int

n;13

double

l;14

int find(int

x)18

void merge(int x,int

y)23}24

double sq(double

x)27

double getdis(int i,int

j)30

bool check(double

mid)

36if(e[i].y0

,i);

37if(l-e[i].y1

,i);38}

39if(find(0)==find(n+1))return

false;40

return

true;41

}42intmain()

53 printf("

%.3f

",ans);

54return0;

55 }

over

關押罪犯 並查集 二分

s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監獄,他...

擴散(二分答案 並查集)

乙個點每過乙個單位時間就會向四個方向擴散乙個距離,兩個點a b連通,記作e a,b 當且僅當a b的擴散區域有公共部分。連通塊的定義是塊內的任意兩個點u v都必定存在路徑e u,a0 e a0,a1 e ak,v 給定平面上的n給點,問最早什麼時刻它們形成乙個連通塊。我們可以二分答案,然後對於每個時...

poj3657 二分 並查集

二分哪一次操作是最後一次正確的操作 1即為錯誤操作。把最小值相同的詢問確定下來,可以得到乙個最小的集合,再更新這個集合的所屬,若有衝突就說明此操作有問題。include include include define maxd 1000010 define maxq 25010 using names...