题目:
链接:点击打开链接
题目:
中文
思路:
算法:
最小生成树,wa...................wa了好多次,就因为我的边序号原来是从0........m,悲催了...............................
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 5050
int ans,n,m;
int root[MAXN];
int u[MAXN],v[MAXN],w[MAXN];
int r[MAXN];
int cmp(const int i,const int j)
{
return w[i] < w[j];
}
int find(int x)
{
return root[x] == x ? x : root[x] = find(root[x]);
}
void kruskal()
{
ans = 0;
for(int i=1; i<=n; i++)
root[i] = i;
for(int i=1; i<=m; i++)
r[i] = i;
sort(r+1,r+m+1,cmp);
for(int i=1; i<=m; i++)
{
int e = r[i];
int x = find(u[e]);
int y = find(v[e]);
if(x != y)
{
ans += w[e];
root[x] = y;
}
}
printf("%d\n",ans);
}
int main()
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF && n)
{
m = n*(n-1)/2;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d",&u[i],&v[i],&w[i]);
}
kruskal();
}
return 0;
}
hdu 1233 还是畅通工程,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u013147615/article/details/27183885