题解:Kruskal 边权升序排序的所加入的最后一条边是答案
代码:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 320 #define maxm 50009 using namespace std; int n,m,ans,tot,fa[maxn]; struct Edge{ int x,y,c; }e[maxm]; bool cmp(Edge a,Edge b){ return a.c<b.c; } int f(int x){ return fa[x]==x?x:fa[x]=f(fa[x]); } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].c); } sort(e+1,e+m+1,cmp); for(int i=1;i<=n;i++)fa[i]=i; for(int i=1;i<=m;i++){ int fx=f(e[i].x),fy=f(e[i].y); if(fx!=fy){ tot++; fa[fx]=fy; if(tot==n-1){ ans=e[i].c; break; } } } cout<<n-1<<" "<<ans<<endl; return 0; }