poj Out of hay 最小生成树 kruscal

题目链接

题意 就是求最小生成树中最大的那条边,题目看了n 久才看懂。

直接采用的是kruscal 算法,并查集+快排。

原先以为会好难~~ 其实并查集用一句话就搞定了,快排结构体 简单爆了

post code:

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct edge{
     int x,y,w;       
}a[20000];
int fa[3000];
int n,m;
int cmp(edge a,edge b){    //quick sort from small to big
      return a.w<b.w;    
}
int Find(int i){              // disjoint set to distinguish different node
   if(i==fa[i])return i;
   fa[i]=Find(fa[i]);
   return fa[i];    
}

int kruscal(){              // pattern of kruscal
   int fax,fay,max=-1;
   for(int i=1;i<=m;i++){
       fax=Find(a[i].x);
       fay=Find(a[i].y);
       if(fax!=fay){
          if(max<a[i].w)max=a[i].w;
          fa[fax]=fay;             
       }
   }
   return max;  
}
int main(){
   while(scanf("%d%d",&n,&m)!=EOF){
         int ans;
         for(int i=1;i<=n;i++)
            fa[i]=i;
         for(int i=1;i<=m;i++)
            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);
         sort(a+1,a+1+m,cmp);
         ans=kruscal();                                          
         printf("%d\n",ans);
   }
   return 0;
} 
/*
4 6
1 2 23
2 3 1000
1 3 43
1 4 60
1 4 70
3 4 50
*/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值