原来样例是错……
#include<iostream>
#include<algorithm>
using namespace std;
struct edges
{
int s, e;
int len;
}edge[15001], record[1001];
int parent[1001];
int cmp(edges a, edges b)
{
return a.len<b.len;
}
void make(int n)
{
int i;
for(i=1; i<=n; i++)
parent[i]=i;
}
int find( int k)
{
return parent[k]==k?k:parent[k]=find(parent[k]);
}
void Union(int a, int b)
{
parent[a]=b;
}
int main()
{
int n, m, i, j, max;
int s, e, len;
cin>>n>>m;
for(i=0; i<m; i++)
cin>>edge[i].s>>edge[i].e>>edge[i].len;
sort(edge, edge+m, cmp);
make(n);
j=1;
for(i=0; j<n; i++)
{
s=find(edge[i].s);
e=find(edge[i].e);
if( s!=e )
{
Union(s, e);
record[j].s=edge[i].s;
record[j].e=edge[i].e;
max=edge[i].len;
j++;
}
}
cout<<max<<endl;
cout<<j-1<<endl;
for(i=1; i<j; i++)
cout<<record[i].s<<" "<<record[i].e<<endl;
}