HDU1879(prim)

#include <iostream>
#include <stdio.h>
#include <string.h>


#define INF 0x7fffff
#define maxn 500 + 10




using namespace std;




int graph[maxn][maxn];
int vis[maxn];
int dis[maxn];
int n,k,m,a,b,cost;
bool falg;


int prim( int start,int num)
{
   memset(vis,0,sizeof(vis));
   memset(dis,INF,sizeof(dis));




   for( int i = 1; i <= n; i++)
     if(graph[start][i] != -1)
         {
             dis[i] = graph[start][i];
         }
     else
      dis[i] = INF;


   dis[start] = 0;
   vis[start] = 1;
  int sum = 0;


  for( int i = 2; i<=n; i++)
  {
      int min = INF;
    for( int j = 1; j<=n; j++)
        if(vis[j] == 0 && min > dis[j])
        {
            min = dis[j];
            k = j;
        }


    sum += dis[k];
    vis[k] = 1;
  for(int j =1; j<= n; j++)
  {
      if(vis[j] == 0 && graph[k][j] != -1 && dis[j] > graph[k][j] )
          dis[j] = graph[k][j];
  }


}


  return sum;
}


int main()
{
    while(scanf("%d",&n),n)
    {
        memset(graph,-1,sizeof(graph));
        m = n*(n-1)/2;
        for( int i =0 ;i <m; i++)
        {
            scanf("%d%d%d%d",&a, &b, &cost, &falg);
            if(falg)
                graph[a][b] = graph[b][a] = 0;
            else
                graph[a][b] = graph[b][a] = cost;
        }
        printf("%d/n",prim(1.n));
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值