#include <iostream>
#include <algorithm>
using namespace std;
int n,p[1005];
struct bian
{
int x,y,d;
}e[15005],ans[1005];
int cmp(bian a1,bian b1)
{
return a1.d<b1.d;
}
void init()
{
for(int i=1;i<=n;i++)
p[i]=i;
}
int find(int x)
{
if(x==p[x]) return x;
else return p[x]=find(p[x]);
}
void jie(int x,int y)
{
int ta=find(x),tb=find(y);
if(ta!=tb) p[ta]=tb;
}
void clus(int m)
{
int x,y,i,c;
init();
for(c=i=0;i<m;i++)
{
x=e[i].x;y=e[i].y;
if(find(x)!=find(y))
{ ans[c].x=x;
ans[c].y=y;
ans[c].d=e[i].d;
c++;
jie(x,y);
}
if(c==n-1) return;
}
}
int main()
{
int i,j,k,t,d1,m;
while(cin>>n>>m)
{ if(n==1) cout<<0<<endl;
else
{for(i=0;i<m;i++)
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].d);
sort(e,e+m,cmp);
clus(m);
cout<<ans[n-2].d<<endl<<n-1<<endl;
for(i=0;i<n-1;i++)
cout<<ans[i].x<<" "<<ans[i].y<<endl;
}
}
return 0;
}
poj 1861 最小生成树
最新推荐文章于 2022-03-09 16:55:41 发布