【P1911】無線通訊網 kruskal
P1911
分析
這是一個最小生成樹的問題,其實只要模擬一下即可。兩種通訊方式,無線電和衛星通訊,假設共m個點,衛星電話是n個。當n < 2的時候實際上就是一個最小生成樹問題,而當n = 2的時候我們可以去掉最小生成樹上的最長邊,通過衛星電話向連結,n > 2時操作也一樣,衛星電話只是改變了kruskal演算法終止的條件,由原先的count = m - 1變為count = m - n 由此我們可以得到一下的程式碼
程式碼
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 505, M = 2e5 + 10;
int n, m, cnt;
int X[N], Y[N], par[N];
struct edge{
int fr, to;
double dis;
}e[M];
void add(int u, int v, double w){
e[++cnt] = {u, v, w};
}
bool cmp(const edge& a, const edge& b){
return a.dis < b.dis;
}
double dist(int p1, int p2){
return sqrt((X[p1] - X[p2])*(X[p1] - X[p2]) + (Y[p1] - Y[p2])*(Y[p1] - Y[p2]));
}
int find(int x){
return x == par[x] ? x: (par[x] = find(par[x]));
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; ++i){
par[i] = i;
cin >> X[i] >> Y[i];
}
for (int i = 1; i <= m; ++i)
for (int j = i + 1; j <= m; ++j)
add(i, j, dist(i, j));
sort(e + 1, e + 1 + cnt, cmp);
int count = 0;
double res = 0;
for (int i = 1; i <= cnt; ++i) {
int x = find(e[i].fr), y = find(e[i].to);
if (x != y){
par[x] = y;
res = e[i].dis;
if (++count == m - n) break;
}
}
printf("%.2f", res);
return 0;
}
相關文章
- 無線通訊
- 北極通訊網路——最小生成樹kruskal
- P1991 無線通訊網
- 無線通訊方案大全
- 乾元通應急救援無線通訊組網解決方案
- 無線通訊的分集技術
- IoT物聯網無線通訊模組該如何選擇?
- 智慧路燈解通訊方式:有線&無線
- 常見物聯網近距離無線通訊技術解析
- 主流無線通訊技術盤點
- SD卡將加入無線通訊功能SD卡
- 智慧售貨機無線通訊方案
- 無線通訊的核心技術有哪些?
- 無線通訊與環境獵能將實現萬物聯網
- 哪些人需要讀《無線通訊簡史》?
- 【通訊原理】Ch.14 無線LAN-WiFiWiFi
- 乾元通多鏈路聚合(弱網通訊)高速公路收費無線傳輸方案
- 乾元通多鏈路無線車輛通訊解決方案
- 無線視訊監控開啟無線網路第二春
- 無線通訊協議設計的幾點要素協議
- AWT100無線通訊終端介紹
- Z-Wave必死?看物聯網方案商解讀無線通訊技術
- 中興新支點ICG解決應急救援無線通訊網路訊號不好的問題
- 美國利用輸電線路開發低成本無線通訊技術
- 華為無線網路:全球43%的人口還未接入網際網路 讓無線訊號連線每個角落
- 關於無線通訊的核心技術詳細介紹
- RF傳輸距離是如何影響無線通訊的?
- IPRdaliy&incoPat:2020年全球無線通訊網路技術專利排名
- 網路通訊
- 程式通訊之無名訊號量
- 戶外應急救援無線通訊圖傳視訊傳輸解決方案
- 樂訊通雲通訊:物聯網路卡為智慧裝置建立連線的橋樑
- 無線組網(藍芽和無線網路卡)藍芽
- 網路通訊2:TCP通訊實現TCP
- 網路通訊3:TCP互動通訊TCP
- 網路通訊2:TCP簡單通訊TCP
- 將筆記本的有線網路分享為無線訊號筆記
- 6G:無線通訊新徵程白皮書(附下載)