poj2421 最小生成樹

2021-09-09 07:21:34 字數 894 閱讀 5637

題目鏈結在這裡

題目大意

有n個村莊,每個村莊之間都有一定的距離,想建幾條路使得村莊之間相互連通,問所需要花費的最小代價是什麼。(有的村莊之間是相互連通的)

解題思路

相互連通的村莊之間的距離置為0,然後將所有村莊之間的距離放到堆裡,直接最小生成樹莽出來就完事了。

**如下

#include #include #include #include #include #define clr(x) memset(x, 0, sizeof(x))

#define rep(i, x) for(int i = 0; i < x; ++i)

using namespace std;

const int maxn = 110;

struct edge

};int n, q;

int map[maxn][maxn];

int r[maxn], par[maxn];

int find(int x)

void unite(int x, int y)

}bool check(int x, int y)

int main()

}cin >> q;

int x, y;

rep(i, q)

priority_queueque;

rep(i, n));}}

int ans = 0;

while(--n)

ans += e.val;

unite(e.x, e.y);

}cout << ans << endl;

return 0;

}

POJ 2421 解題報告

這道題還是求最小生成樹。兩個村莊connected的定義就是一般意義上的connected,只不過是通過 遞迴 地定義的 要不直接有路相連,要不鄰接的村莊能 connect 這就是最小生成樹的目的 所有點都是聯通的,但是又是最小的。因而常見的兩種最小生成樹演算法 prim和kruskal都可以用。我...

POJ2421 prim演算法求最小生成樹

題意 鄰接村子裡面所有的村莊,使得道路的總長度最小。分析 由於題意說會有已經通好道路的村莊。我們任然可以利用prim求解最小生成樹,只要把已經通好道路的權值置為0,就行了。view code 1 i m the topcoder2 c3 include 4 include 5 include 6 i...

POJ 1258 最小生成樹

include include struct fiberfiber 10000 struct farmsfarms 100 void exchange struct fiber fiber,int i,int j int partition struct fiber fiber,int p,int ...