要求最大值最小,不難想到使用二分法。我們每次二分乙個「最大的d」,然後將大於d的邊捨去,然後看一下去邊後的圖有多少個連通分量。連通分量的數目就是增配衛星**的數目。
至於求連通分量數目我們可以使用並查集。
#include #include #include using namespace std;
#define maxp 505
int s, p;
struct nodenode[maxp];
struct edgeedge[maxp*maxp];
int m;
bool cmp(edge a, edge b)
double distance(int x, int y)
int fa[maxp];
int find(int x)
bool flag[maxp];
bool check(int d)
for(int i = 1; i<=p; ++i) flag[i] = false;
for(int i = 1; i<=p; ++i) flag[find(i)] = true;
int cnt = 0;
for(int i = 1; i<=p; ++i) if(flag[i]) ++cnt;
if(cnt<=s) return true;
return false;
}int main()
sort(edge+1, edge+1+m, cmp);
int l = 1, r = m, mid, ans;
while(l<=r)
printf("%.2lf\n", edge[ans].w);
return 0;
}
洛谷 P1991 無線通訊網 題解
每個邊防哨所都要配備無線電收發器 有一些哨所還可以增配衛星 任意兩個配備了一條衛星 線路的哨所 兩邊都 有衛星 均可以通話,無論他們相距多遠。而只通過無線電收發器通話的哨所之間的距離不能超過 d,這是受收發器的功率限制。收發器的功率越高,通話距離 d 會更遠,但同時 也會更貴。收發器需要統一購買和安...
洛谷 P1991 無線通訊網
這道題找到關鍵點那就是模板題了,好寫噠 因為有s個 兩個 就可以連通兩個塊,那是不是我們就可以看做一條無消耗的邊,提前連了起來。根據kruskal的思想,我們每次加入最小的邊,直到聯通,由於兩台 一條線,所以我們加入的點也就只需要p s條了,相當於貪心掉了最大需要的邊。o泡 時間到 include ...
洛谷P1991 無線通訊網 MST
題目 本題難在對題意的理解,也就是難在衛星 的放置上。以樣例說明,最小生成樹mst如下圖所示 可以放置2部衛星 所以還要放置2部接髮器。將邊bc去掉,得到兩個連通塊ab與cd,不妨衛星 放在點a,點c,則連通塊ab內接髮器功率要求為100,連通塊cd內接髮器功率為212.13,求出最大功率為212....