hdu1233还是畅通工程_最小生成树

/*
分析:
    第一次写prim,算半个模板吧。
注意不要人为的先把ans=E[0].len,万一读入的边的数量是0呢?血淋淋的WA啊……

                                                      2012-06-17
*/
#include"stdio.h"
#include"stdlib.h"
struct A
{
 int a,b;
 int len;
}E[4855];
int cmp(const struct A *a,const struct A *b)
{
 return a->len-b->len;
}
int main()
{
 int n;
 int i;
 int temp;
 int ans;
 int flag;
 int hash[111];
 
 while(scanf("%d",&n),n)
 {
  temp=n*(n-1)/2;
  for(i=0;i<temp;i++) scanf("%d%d%d",&E[i].a,&E[i].b,&E[i].len);

  qsort(E,temp,sizeof(E[0]),cmp);

  for(i=1;i<=n;i++) hash[i]=1;

  hash[E[0].a]=0;
  ans=0;
  for(i=0;i<temp;i++)
  {
   flag=hash[E[i].a]+hash[E[i].b];
   if(flag==1)
   {
    ans+=E[i].len;
    hash[E[i].a]=hash[E[i].b]=0;
    i=0;
   }
  }

  printf("%d\n",ans);
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值