#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
const int A = 50001;
struct city{int u,v,w;}a[A];//结构体city
int father[A];
int n,m,fx,s,fy;
int best =0,k=0;
int find(int x){return father[x] = father[x]==x?x:find(father[x]);}//找爹函数(并查集)
int cmp(city&a,city&b){return a.w <b.w;}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);
}
for(int i=1;i<=n;i++)father[i] = i;//初始每个道路都不相通
sort(a+1,a+m+1,cmp);//江道路按分值排序,保证改造的道路中分值最大的最小
for(int i=1;i<=m;i++){
fx=find(a[i].u);
fy=find(a[i].v);
if(fx!=fy){//连边
father[fy]=fx;
k++;
best = a[i].w;//由于已排序,所以不需比较
}
if(k==n-1)break;//终结条件为n个交叉路口都相通,n个点遍历n-1条边(不严谨)
s=n-1;
}
cout<<s<<' '<<best;//注意空格
return 0;
}
by 最喜欢saber了 @ 2018-04-27 20:22:34