題目鏈結在這裡
題目大意
有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 ...