sample好像有点问题
#include <iostream>
#include <cstdio>
#include <memory.h>
#include <algorithm>
using namespace std;
const int pmaxn=1010,emaxn=15010;
struct edge
{
int u,v,w;
bool operator<(const edge&rhs)const{
return w<rhs.w;
}
}es[emaxn];
int id[pmaxn],size[pmaxn],n,m;
pair<int,int>ansp[emaxn];
void init(){
for (int i=1;i<=n;++i){
id[i]=i;
size[i]=1;
}
}
int find(int p){
return p==id[p]?p:id[p]=find(id[p]);
}
bool uni(int p,int q){
int pp=find(p),pq=find(q);
if(pp==pq)return false;
if(size[pp]>size[pq]){
id[pq]=pp;
size[pp]+=size[pq];
}else{
id[pp]=pq;
size[pq]+=size[pp];
}
return true;
}
void kruskcal(){
sort(es,es+m);
int ans=0;
for (int i=0,j=0;i<m&&j<n-1;++i){
if(uni(es[i].u,es[i].v)){
ansp[j].first=es[i].u,ansp[j].second=es[i].v;
ans=max(ans,es[i].w);
j++;
}
}
printf("%d\n%d\n",ans,n-1);
for (int i=0;i<n-1;++i){
printf("%d %d\n",ansp[i].first,ansp[i].second);
}
}
int main(){
while (scanf("%d%d",&n,&m)==2){
init();
for (int i=0;i<m;++i){
scanf("%d%d%d",&es[i].u,&es[i].v,&es[i].w);
}
kruskcal();
}
return 0;
}