北極網路(Kruskal)

2021-10-09 04:20:42 字數 1443 閱讀 1463

國防部(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...