題目大意
題目分析
實現(c++)
#include#include#include#includeusing namespace std;#define max_node 505
//點的資料結構
struct point;
vectorgpoints;
//邊的資料結構
struct edge;
};vectorgedges;
//計算兩點之間的距離
double dist(const point& p1, const point& p2)
//用並查集來判斷加入一條邊是否會構成環
int groot[max_node];
int getroot(int c)
return groot[c];
}bool sameroot(int c1, int c2)
void union(int c1, int c2)
//用於對邊進行排序
bool compare(const edge& e1, const edge& e2)
double kruskal(int s, int n)
sort(gedges.begin(), gedges.end(), compare); //無向圖的邊只儲存了 從序號較小的節點指向序號較大的節點
int count = 0;
for (int i = 0; i < gedges.size(); i++)
union(e.to, e.from);
//groot[groot[e.to]] = groot[e.from]; //注意合併的時候,將 to 的根更新為 from的根。因為所有的邊只儲存了從小序號指向大序號
} return 0;
}int main()
gpoints.push_back(point);
} double result = kruskal(s, p);
printf("%.2lf\n", result);
} return 0;
}
POJ2349(kruskal演算法建立最小生成樹)
題意 在要求將所有無線 點都連線起來的基礎上輸出d的最小值。d是任意無線 點使用無線收發電機直接對外聯絡距離的最大值。無線 點連線有兩種方式 使用無線收發電機和衛星通道連線。給定資料是哨站的數量 衛星通道的數量,哨站的座標。求解d的最小值。思路 1 首先考慮沒有衛星通道時我們如何求解d的最小值。回顧...
poj 2349解題報告
想比賽前吧模板整理好,就做了一道這個題看看模板 題意 有p個點,用座標給出,有兩種 1每個點可以和距離在d以內的點相互聯絡,2有s個專門的衛星通道,兩個點直接聯絡 求d最小多少可以把這個圖連起來 題解 首先不考慮s個衛星通道,先求最小生成樹,用衛星通道把最小生成樹中最大的s 1個邊代替掉,然後剩下的...
poj 2349解題報告
想比賽前吧模板整理好,就做了一道這個題看看模板 題意 有p個點,用座標給出,有兩種 1每個點可以和距離在d以內的點相互聯絡,2有s個專門的衛星通道,兩個點直接聯絡 求d最小多少可以把這個圖連起來 題解 首先不考慮s個衛星通道,先求最小生成樹,用衛星通道把最小生成樹中最大的s 1個邊代替掉,然後剩下的...