poj 1861 prim求边
来源:互联网 发布:网络搭建教程 编辑:程序博客网 时间:2024/04/30 01:48
#include <iostream>using namespace std;int a[1005][1005],b[1005],t,ans;struct point {int s,e;}p[1005];void prime(int k){ int i,j,m,k1,mist[1005]; ans=0; for(i=1;i<=t;i++) {b[i]=a[1][i];mist[i]=1; }b[k]=0; for(i=1;i<t;i++) { m=1<<20; for(j=1;j<=t;j++) if(b[j]!=0&&b[j]<m) m=b[j],k=j; p[i].s=mist[k],p[i].e=k; if(ans<b[k]) ans=b[k]; b[k]=0; for(j=1;j<=t;j++)if(b[j]>a[k][j]) {b[j]=a[k][j];mist[j]=k;} }}int main(){ int i,j,m,d; while(cin>>t>>m) { for (i = 1; i <= t; i++) for (j = 1; j <= t; j++) a[i][j]=1<<29;while(m--) {scanf("%d%d%d",&i,&j,&d); a[i][j]=d;a[j][i]=d;} prime(1); cout<<ans<<endl<<t-1<<endl; for(i=1;i<t;i++) cout<<p[i].s<<' '<<p[i].e<<endl; } return 0;}