【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
- 無線通訊方案大全
- 乾元通應急救援無線通訊組網解決方案
- IoT物聯網無線通訊模組該如何選擇?
- 智慧路燈解通訊方式:有線&無線
- 無線通訊的發展過程
- 無線通訊的核心技術有哪些?
- 檢視無線網路卡資訊
- 哪些人需要讀《無線通訊簡史》?
- AWT100無線通訊終端介紹
- 【通訊原理】Ch.14 無線LAN-WiFiWiFi
- IPRdaliy&incoPat:2020年全球無線通訊網路技術專利排名
- 乾元通多鏈路聚合(弱網通訊)高速公路收費無線傳輸方案
- 乾元通多鏈路無線車輛通訊解決方案
- 樂訊通雲通訊:物聯網路卡在無人機的應用無人機
- 無線通訊協議設計的幾點要素協議
- 中興新支點ICG解決應急救援無線通訊網路訊號不好的問題
- 華為無線網路:全球43%的人口還未接入網際網路 讓無線訊號連線每個角落
- RF傳輸距離是如何影響無線通訊的?
- 關於無線通訊的核心技術詳細介紹
- 網路通訊
- 樂訊通雲通訊:物聯網路卡為智慧裝置建立連線的橋樑
- 戶外應急救援無線通訊圖傳視訊傳輸解決方案
- 網路通訊3:TCP互動通訊TCP
- 網路通訊2:TCP簡單通訊TCP
- 網路通訊2:TCP通訊實現TCP
- 6G:無線通訊新徵程白皮書(附下載)
- 無線通訊在智慧公交系統上的設計應用
- 串列埠無法正常通訊串列埠
- 企業無線覆蓋,企業無線網路,辦公無線區域網方案
- 無線AP組網例項:多個無線AP間無線組網的方法教程
- udp網路通訊UDP
- Windows git無法與github通訊WindowsGithub
- 使用iwctl連線無線網路
- 無線通訊模組的多主機閘道器工作模式簡介模式
- 5G超高清質量檢測無線通訊解決方案分享
- 高通Atheros AR9287/AR9280無線網路卡晶片介紹ROS晶片
- 19作 網路通訊