您的位置:首页 > 其它

ZOJ 1406 Jungle Roads (kruskal)

2010-08-28 00:16 351 查看
史上最水最小生成树,不解释,不注释。

#include<iostream>
using namespace std;
int u[500],v[500],w[500];
int r[500],p[500];;
int a,b,counter,n;
int cases,i,j;
char c[5];
int cmp(const int i,const int j)
{return w[i]<w[j];}
int find(int x)
{return p[x]==x?x:p[x]=find(p[x]);}
int kruskal(void)
{
int ans = 0;
for(int i = 1; i <= n; i++)
p[i] = i;
for(int i = 1; i <= counter; i++)
r[i] = i;
sort(r,r+counter+1,cmp);
for(int i = 1; i <= counter; i++)
{
int e = r[i];
int x = find(u[e]),y = find(v[e]);
if( x - y )
{
ans += w[e];
p[x] = y;
}
}
return ans;
}

int main(void)
{
while( cin >> n && n )
{
counter = 0;
for(i = 1; i < n; i++ )
{
cin >> c;
a = c[0] - 'A' + 1;
cin >> cases;
for( j = 1;j <= cases; j++ )
{
counter++;
cin >> c;
b = c[0] - 'A' + 1;
u[counter] = a;
v[counter] = b;
cin >> w[counter];
}
}
cout << kruskal() << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: