poj 1287 kruskal
来源:互联网 发布:手机更换网络制式硬件 编辑:程序博客网 时间:2024/05/02 22:25
#include<stdio.h>#include<algorithm>int P,R,map[600][600],pre[600];#define MX 1000010#include<string.h>using namespace std;struct point{ int s,e; int leth;}eg[510];bool cmp(point a,point b){ return a.leth<b.leth;}int find(int w){ int now,root=w; while(pre[root]!=root) root=pre[root]; while(pre[w]!=root) { now=pre[w]; pre[w]=root; w=now; } return root;}int main(){ while(scanf("%d",&P)&&P) { scanf("%d",&R); memset(eg,0,sizeof(eg)); for(int i=1;i<=P;i++) for(int j=1;j<=P;j++) map[i][j]=MX; for(int i=1;i<=P;i++) pre[i]=i; for(int i=0;i<R;i++) { int a,b,c; scanf("%d%d%d",&eg[i].s,&eg[i].e,&eg[i].leth); //scanf("%d%d%d",&a,&b,&c); //if(map[a][b]>c) //{ // map[a][b]=map[b][a]=c; //} } int k=0,sum=0; /*for(int i=1;i<=P;i++) for(int j=i;j<=P;j++) { if(map[i][j]<MX) { eg[k].s=i;eg[k].e=j; eg[k++].leth=map[i][j]; } }*/ sort(eg,eg+R,cmp); for(int i=0;i<R;i++) { int x,y; x=find(eg[i].s); y=find(eg[i].e); if(x!=y) { k++; pre[y]=x; sum+=eg[i].leth; } if(k==P-1) { break; } } printf("%d\n",sum); } return 0;}