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;}