poj 2349 Kruskal 最小生成樹

2022-04-28 16:30:09 字數 1108 閱讀 1145

題目大意

題目分析

實現(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個邊代替掉,然後剩下的...