乙個點每過乙個單位時間就會向四個方向擴散乙個距離,如圖。
兩個點a、b連通,記作e(a,b),當且僅當a、b的擴散區域有公共部分。連通塊的定義是塊內的任意兩個點u、v都必定存在路徑e(u,a0),e(a0,a1),…,e(ak,v)。給定平面上的n給點,問最早什麼時刻它們形成乙個連通塊。
輸入格式:
第一行乙個數n,以下n行,每行乙個點座標。
【資料規模】
對於20%的資料,滿足1≤n≤5; 1≤x[i],y[i]≤50;
對於100%的資料,滿足1≤n≤50; 1≤x[i],y[i]≤10^9。
輸出格式:
乙個數,表示最早的時刻所有點形成連通塊。
輸入樣例#1: 複製
2輸出樣例#1: 複製0 05 5
5二分答案且曼哈頓距離<=mid*2
#include#includeview code#include
using
namespace
std;
int xs[51
];int ys[51];//
座標int ints[51];//
並查集int find(int
n)int
main()
//初始化並查集
for(register int i=0;i)}}
int cnt=0;//
連通塊個數
for(register int i=0;i)
if(cnt==1)//
只有乙個連通塊就更新答案向下查詢
else
}cout
return(0
);}
洛谷P1661擴散 二分 並查集
首先我們先二分答案,然後用並查集記錄有多少個聯通塊。如果兩個聯通塊成為乙個聯通塊,則他們的哈密頓距離小於擴散時間的一半。因此可以二分答案,檢查是否等於乙個聯通塊就行了。include include include include using namespace std typedef long l...
擴散(二分答案 並查集)
乙個點每過乙個單位時間就會向四個方向擴散乙個距離,兩個點a b連通,記作e a,b 當且僅當a b的擴散區域有公共部分。連通塊的定義是塊內的任意兩個點u v都必定存在路徑e u,a0 e a0,a1 e ak,v 給定平面上的n給點,問最早什麼時刻它們形成乙個連通塊。我們可以二分答案,然後對於每個時...
關押罪犯 並查集 二分
s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監獄,他...