題目
這一題對我有歷史性的意義,因為我深刻意識到:
不要用namespace!
不要用namespace!
不要用namespace!
寫此題解,以示他人。
(搞錯重點了吧喂!)
好,回歸正題:
這道題的思路是這樣:
首先,用kruskal演算法。
(建議先把 並查集模板與 最小生成樹模板 打了再繼續看)
我們回顧一下kruskal演算法的過程:
把邊按權值從小到大一條條排好,然後再從未選擇的點中新增邊,一直新增到節點數-1為止。
重點:為什麼是節點數-1?因為最小生成樹要讓圖連通。
可不可以不連通?
可以!該題中,衛星**的存在,就是為了可以讓圖斷開。而最後求的最大邊,就是最後乙個新增到圖中的邊。
附上**:
#include #define maxn 200005
int node,edgenum=0,ans=0,k=0,s;
int fat[maxn],siz[maxn];
//座標
struct pair
a[maxn];
//圖
struct edge
e[maxn];
//比較器
bool cmp(edge a,edge b)
//兩點之間距離公式
double distance(pair m , pair n)
int main()
//初始化
for(int i=1;i<=node;++i) //構圖 }
// kurskal
std::sort(e+1,e+edgenum+1,cmp);
for(int i=1;i<=edgenum;++i)
} std::printf("%.2lf",d);
return 0;
}
其實這題的資料有點弱。
我的**是有缺陷的,可是ac了。
應該還要再新增一些特判。
比如,當衛星**數大於節點數時,d應該為0。
當衛星**數為0時,應該與衛星**為1時的情況相等。
P1991 無線通訊網 MST
每個邊防哨所都要配備無線電收發器 有一些哨所還可以增配衛星 任意兩個配備了一條衛星 線路的哨所 兩邊都 有衛星 均可以通話,無論他們相距多遠。而只通過無線電收發器通話的哨所之間的距離不能超過 d,這是受收發器的功率限制。收發器的功率越高,通話距離 d 會更遠,但同時 也會更貴。收發器需要統一購買和安...
洛谷 P1991 無線通訊網 題解
每個邊防哨所都要配備無線電收發器 有一些哨所還可以增配衛星 任意兩個配備了一條衛星 線路的哨所 兩邊都 有衛星 均可以通話,無論他們相距多遠。而只通過無線電收發器通話的哨所之間的距離不能超過 d,這是受收發器的功率限制。收發器的功率越高,通話距離 d 會更遠,但同時 也會更貴。收發器需要統一購買和安...
洛谷 P1991 無線通訊網
這道題找到關鍵點那就是模板題了,好寫噠 因為有s個 兩個 就可以連通兩個塊,那是不是我們就可以看做一條無消耗的邊,提前連了起來。根據kruskal的思想,我們每次加入最小的邊,直到聯通,由於兩台 一條線,所以我們加入的點也就只需要p s條了,相當於貪心掉了最大需要的邊。o泡 時間到 include ...