题目:
http://poj.org/problem?id=1258
思路:
最小生成树模板题, Prim算法.
CODE:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0xffffff;
int farm[105][105], d[105], n;
bool used[105];
int prim()
{
fill(d, d + n, INF);
memset(used, 0, sizeof(used));
d[0] = 0;
int ans = 0;
while(1) {
int v = -1;
for(int i = 0; i < n; ++i) {
if(!used[i] && (v == -1 || d[i] < d[v])) v = i;
}
if(v == -1) break;
used[v] = 1;
ans += d[v];
for(int i = 0; i < n; ++i) {
d[i] = min(d[i], farm[v][i]);
}
}
return ans;
}
int main()
{
//freopen("in", "r", stdin);
while(~scanf("%d", &n)) {
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
scanf("%d", &farm[i][j]);
}
}
int ans = prim();
printf("%d\n", ans);
}
return 0;
}