AcWing 1145 北極通訊網路 題解

2021-10-17 23:09:34 字數 1896 閱讀 4162

acwing 1145. 北極通訊網路

北極的某區域共有 n 座村莊,每座村莊的座標用一對整數 (x,y) 表示。

通訊工具可以是無線電收發機,也可以是衛星裝置。

無線電收發機有多種不同型號,不同型號的無線電收發機有乙個不同的引數 d,兩座村莊之間的距離如果不超過 d,就可以用該型號的無線電收發機直接通訊,d 值越大的型號**越貴。現在要先選擇某一種型號的無線電收發機,然後t統一給所有村莊配備,數量不限,但型號都是 相同的。

配備衛星裝置的兩座村莊無論相距多遠都可以直接通訊,但衛星裝置是 有限的,只能給一部分村莊配備。

現在有 k 臺衛星裝置,請你編乙個程式,計算出應該如何分配這 k 臺衛星裝置,才能使所配備的無線電收發機的 d 值最小。

例如,對於下面三座村莊:

其中,|ab|=10,|bc|=20,|ac|=10√5≈22.36。

如果沒有任何衛星裝置或只有 1 臺衛星裝置 (k=0 或 k=1),則滿足條件的最小的 d=20,因為 a 和 b,b 和 c 可以用無線電直接通訊;而 a 和 c 可以用 b 中轉實現間接通訊 (即訊息從 a 傳到 b,再從 b 傳到 c);

如果有 2 臺衛星裝置 (k=2),則可以把這兩台裝置分別分配給 b 和 c ,這樣最小的 d 可取 10,因為 a 和 b 之間可以用無線電直接通訊;b 和 c 之間可以用衛星直接通訊;a 和 c 可以用 b 中轉實現間接通訊。

如果有 3 臺衛星裝置,則 a,b,c 兩兩之間都可以直接用衛星通訊,最小的 d 可取 0。

輸入格式

第一行為由空格隔開的兩個整數 n,k;

接下來 n 行,每行兩個整數,第 i 行的 xi,yi 表示第 i 座村莊的座標 (xi,yi)。

輸出格式

乙個實數,表示最小的 d 值,結果保留 2 位小數。

資料範圍

1≤n≤500,

0≤x,y≤104,

0≤k≤100

輸入樣例:

3 210 10

10 0

30 0

輸出樣例:

10.00

先跑一遍最小生成樹,然後再刪除前k大的邊,再輸出最大的那條邊。

#include

using

namespace std;

const

int maxn=

1e6;

int n,k;

int x[maxn]

,y[maxn]

;int fa[maxn]

;struct node

}e[maxn*2]

;void

init()

return;}

doublejl(

int a,

int b)

intfind

(int x)

return fa[x];}

intmain()

int idx=1;

for(

int i=

1;i<=n;i++)}

sort

(e+1

,e+idx+1)

;init()

;double res=0;

int cnt=0;

for(

int i=

1;i<=idx;i++)if

(cnt==n-k)

}printf

("%.2lf\n"

,res)

;return0;

}

1145 北極通訊網路

解題報告 這道題實質上是在問滿足存在k個連通塊的最小d是多少。然而並不用二分,因為在kruskal演算法的過程中本身聯通塊的數目就是遞減的,從一開始的n到k然後記錄最小值就能ac這道題了。include include include include using namespace std cons...

北極通訊網路

北極的某區域共有 nn 座村莊,每座村莊的座標用一對整數 x,y x,y 表示。通訊工具可以是無線電收發機,也可以是衛星裝置。無線電收發機有多種不同型號,不同型號的無線電收發機有乙個不同的引數 dd,兩座村莊之間的距離如果不超過 dd,就可以用該型號的無線電收發機直接通訊,dd 值越大的型號 越貴。...

Kruskal 北極通訊網路

不同型號的無線電收發機有乙個不同的引數d,兩座村莊之間的距離如果不超過d就可以用該型號的無線電收發機直接通訊,d值越大的型號 越貴。擁有衛星裝置的兩座村莊無論相距多遠都可以直接通訊。現在有k臺 1 k 100 衛星裝置,請你編寫乙個程式,計算出應該如何分配這k臺衛星裝置,才能使所有的無線電收發機的d...