您的位置:首页 > 其它

poj 2377 Bad Cowtractors(最大生成树)

2014-07-05 14:22 471 查看
题意是求一个树的最大生成树,若不能生成树,则输出-1。

代码:

#include <stdio.h>

const int maxn = 1001;
const int inf = 0x3f3f3f3f;

int g[maxn][maxn];
int n, m;

int prim()
{
bool vis[maxn];
int dis[maxn];
int res = 0;
for (int i = 1; i <= n; i++)
{
dis[i] = -inf;
vis[i] = false;
}
dis[1] = 0;
vis[1] = true;
int mark = 1;
for (int i = 1; i < n; i++)
{
for (int j = 1; j <= n; j++)
{
if (!vis[j] && dis[j] < g[mark][j])
dis[j] = g[mark][j];
}
int maxdis = -1;
for (int j = 1; j <= n; j++)
{
if (!vis[j] && maxdis < dis[j])
{
maxdis = dis[j];
mark = j;
}
}
if (maxdis <= 0)
return -1;//debug
vis[mark] = true;
res += maxdis;
}
return res;
}

int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
while (scanf("%d%d", &n, &m) == 2)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i == j)
g[i][j] = 0;
else
g[i][j] = -inf;
}
}
for (int i = 0; i < m; i++)
{
int from, to, c;
scanf("%d%d%d", &from, &to, &c);
if (g[from][to] < c)//debug
g[from][to] = g[to][from] = c;
}
int ans = prim();
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: