P1991 無線通訊網 MST

2022-05-18 05:53:33 字數 2116 閱讀 2730

每個邊防哨所都要配備無線電收發器;有一些哨所還可以增配衛星**。

任意兩個配備了一條衛星**線路的哨所(兩邊都ᤕ有衛星**)均可以通話,無論他們相距多遠。而只通過無線電收發器通話的哨所之間的距離不能超過 d,這是受收發器的功率限制。收發器的功率越高,通話距離 d 會更遠,但同時**也會更貴。

收發器需要統一購買和安裝,所以全部哨所只能選擇安裝一種型號的收發器。換句話說,每一對哨所之間的通話距離都是同乙個 d。你的任務是確定收發器必須的最小通話距離 d,使得每一對哨所之間至少有一條通話路徑(直接的或者間接的)。

從 wireless.in 中輸入資料第 1 行,2 個整數 s 和 p,s 表示可安裝的衛星**的哨所數,p 表示邊防哨所的數量。接下裡 p 行,每行兩個整數 x,y 描述乙個哨所的平面座標(x, y),以 km 為單位。

輸出 wireless.out 中

第 1 行,1 個實數 d,表示無線電收發器的最小傳輸距離,精確到小數點後兩位。

輸入 #1複製

2 4

0 100

0 300

0 600

150 750

輸出 #1複製

212.13
對於 20% 的資料:p = 2,s = 1

對於另外 20% 的資料:p = 4,s = 2

對於 100% 的資料保證:1 ≤ s ≤ 100,s < p ≤ 500,0 ≤ x,y ≤ 10000。

思路

建圖算出點之間距離跑kruskal,滿足可以通訊的站點數 就是總數 - 衛星通話的站點數

code

1 #include 2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;

8const

int maxn = 2e5+7;9

10///

把所有邊排序,記第i小的邊為:e[i](1

<= i < m)

11///

初始化mst為空

12///

初始化連通分量,讓每個點自成乙個獨立的連通分量

13///

for(int i = 0; i

< m; i++)

18///}19

20int fa[5050

],n,m,ans,eu,ev,cnt;

2122

struct

nodee[maxn];

2627

struct

node a[maxn];

3031

bool

cmp(node a, node b)

3235

36int fid(int

x)37

4041

void init(int

n)42

46 ans = 0

;47 cnt = 0;48

}4950bool unite(int r1, int r2)///

冰茶雞51

57return

false;58

}5960void kruskal(int n,int s,int

m)61

69 ans +=e[i].w;

70 fa[ev] =eu;

71//

printf("cnt:%d n-s:%d\n",cnt+1,n-s);

72if(++cnt == n-s) 76}

77}7879

intmain()

8089

int num = 1;90

for(int i = 1; i <= n; i++) 96}

97/*

for(int i = 1; i <= num; i++)

*/100 num--;

101init(n);

102kruskal(n,s,num);

103}

104return0;

105 }

view code

洛谷P1991 無線通訊網 MST

題目 本題難在對題意的理解,也就是難在衛星 的放置上。以樣例說明,最小生成樹mst如下圖所示 可以放置2部衛星 所以還要放置2部接髮器。將邊bc去掉,得到兩個連通塊ab與cd,不妨衛星 放在點a,點c,則連通塊ab內接髮器功率要求為100,連通塊cd內接髮器功率為212.13,求出最大功率為212....

題解 P1991 無線通訊網

題目 這一題對我有歷史性的意義,因為我深刻意識到 不要用namespace 不要用namespace 不要用namespace 寫此題解,以示他人。搞錯重點了吧喂!好,回歸正題 這道題的思路是這樣 首先,用kruskal演算法。建議先把 並查集模板與 最小生成樹模板 打了再繼續看 我們回顧一下kru...

洛谷 P1991 無線通訊網

這道題找到關鍵點那就是模板題了,好寫噠 因為有s個 兩個 就可以連通兩個塊,那是不是我們就可以看做一條無消耗的邊,提前連了起來。根據kruskal的思想,我們每次加入最小的邊,直到聯通,由於兩台 一條線,所以我們加入的點也就只需要p s條了,相當於貪心掉了最大需要的邊。o泡 時間到 include ...