杭电3371 prime()算法

         蛋疼的G++,,不解释。不过最近看楼教主似乎提交的代码都是用G++的,,,,看来以后提交代码都用G++吧,,,,能提高水平。。。。。用prime算法过的,,,跑了900多ms,,,无语,,,求优化!

G++ac代码:

#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int N=502;
//const int INF=0xfffffff;
#define INF 10005
int visted[N],map[N][N],key[N];
int n,sum;
void prime(){
  memset(visted,0,sizeof(visted));
  for(int i=1;i<=n;++i)
      key[i]=map[1][i];
  key[1]=0;visted[1]=1;
  int temp,k;
  sum=0;
  for(int i=1;i<=n;++i){
      temp=INF;
      for(int j=1;j<=n;++j){
          if(!visted[j]&&temp>key[j]){
            temp=key[j];k=j;
          }
      }
      if(temp==INF)
          break;
      //printf("temp===%d\n",temp);
      visted[k]=1;
      sum+=temp;
      //printf("sum==%d\n",sum);
      for(int j=1;j<=n;++j){
        if(!visted[j]&&key[j]>map[k][j])
            key[j]=map[k][j];
      }
  }
}
int main(){
  int kk;
  scanf("%d",&kk);
  while(kk--){
    int m,k;
    memset(map,INF,sizeof(map));
    scanf("%d%d%d",&n,&m,&k);
    int a,b,c;
    while(m--){
      scanf("%d%d%d",&a,&b,&c);
      if(c<map[a][b])
          map[a][b]=map[b][a]=c;
    }
    int t,x,y;
    while(k--){
      scanf("%d",&t);
      scanf("%d",&x);
      t--;
      while(t--){
        scanf("%d",&y);
        map[x][y]=map[y][x]=0;
      }
    }
    prime();
    int flag=1;
    for(int i=1;i<=n;++i){
        if(visted[i]==0){
          flag=0;break;
        }
    }
    if(flag)
        printf("%d\n",sum);
    else
        printf("-1\n");
  }
  return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值