國防部(dnd)希望通過無線網路連線幾個北部前哨站。
在建立網路時將使用兩種不同的通訊技術:每個前哨站都有乙個無線電收發器,一些前哨站還有乙個通訊衛星。
任意兩個擁有通訊衛星的前哨站不論它們的位置如何,都可以通過衛星進行通訊。
而如果利用無線電進行通訊,則需要兩個前哨站的距離不能超過d方可進行通訊。
而d的大小取決於收發器的功率,收發器的功率越大,d也就越大,但是需要的成本也就越高。
出於採購和維護的考慮,所有的前哨站都採用相同的收發器,也就是說所有前哨站的無線電通訊距離d都是相同的。
你需要確定在保證任意兩個前哨站之間都能進行通訊(直接或間接)的情況下,d的最小值是多少。
第一行包含整數n,表示共有n組測試資料。
每組資料的第一行包含兩個整數s和p,其中s為衛星個數,p為前哨站個數。
接下來p行每行包含兩個整數x和y,分別表示乙個前哨站的橫縱座標。
輸出乙個實數,表示d的最小值,結果保留兩位小數。
樣例輸入
12 4
0 100
0 300
0 600
150 750
樣例輸出
212.13
比較版的題,先鄰接矩陣預處理兩點見距離,再用kruskal演算法跑最小生成樹。因為衛星可以不考慮距離,所以答案為最小生成樹第s+1長的邊。
#include
#include
#include
#include
#include
using namespace std;
const
int m=
1e6+5;
struct edgeg[m]
;struct nodea[m]
;int n,fa[m]
,cnt,t,p;
doublep(
int l,
int r,
int ll,
int rr)
void
makeset()
}int
findset
(int x)
return fa[x];}
void
unionset
(int u,
int v)
bool cmp
(edge e1,edge e2)
intmain()
}sort
(g+1
,g+cnt+
1,cmp)
;int tot=
1,_tot=1;
double ans=0;
while
(_tot<=cnt&&tot<=n-p)
_tot++;}
printf
("%.2lf\n"
,ans);}
return0;
}
ac! Kruskal 北極通訊網路
不同型號的無線電收發機有乙個不同的引數d,兩座村莊之間的距離如果不超過d就可以用該型號的無線電收發機直接通訊,d值越大的型號 越貴。擁有衛星裝置的兩座村莊無論相距多遠都可以直接通訊。現在有k臺 1 k 100 衛星裝置,請你編寫乙個程式,計算出應該如何分配這k臺衛星裝置,才能使所有的無線電收發機的d...
北極通訊網路
北極的某區域共有 nn 座村莊,每座村莊的座標用一對整數 x,y x,y 表示。通訊工具可以是無線電收發機,也可以是衛星裝置。無線電收發機有多種不同型號,不同型號的無線電收發機有乙個不同的引數 dd,兩座村莊之間的距離如果不超過 dd,就可以用該型號的無線電收發機直接通訊,dd 值越大的型號 越貴。...
1145 北極通訊網路
解題報告 這道題實質上是在問滿足存在k個連通塊的最小d是多少。然而並不用二分,因為在kruskal演算法的過程中本身聯通塊的數目就是遞減的,從一開始的n到k然後記錄最小值就能ac這道題了。include include include include using namespace std cons...