就是紫书的思路,像暴力
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const int INF = 0x3f3f3f3f;
struct Edge{
int u,v,cost;
bool operator < (const Edge& a)const {
return cost > a.cost;
}
};
vector<Edge> edges;
int n,m;
int F[MAXN];
int find_(int x){
return x==F[x]?x:F[x]=find_(F[x]);
}
int kruskal(int k){
for(int i=0;i<=n;i++) F[i]=i;
int cnt=0;
int minn=INF,maxn=0;
for(int i=k;i<m;i++){
Edge e=edges[i];
int v=e.v;
int u=e.u;
int fu=find_(u);
int fv=find_(v);
if(fu!=fv){
cnt++;
F[fu]=fv;
minn = min(e.cost,minn);
maxn = max(e.cost,maxn);
}
}
if(cnt!=n-1) return -1;
else return maxn-minn;
}
int main()
{
while(~scanf("%d%d",&n,&m)){
if(n==0&&m==0) break;
edges.clear();
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
edges.push_back((Edge){a,b,c});
}
sort(edges.begin(),edges.end());
int ans=INF;
for(int i=0;i<=m;i++){
int t=kruskal(i);
if(t==-1) break;
ans = min(ans,t);
}
if(ans == INF) printf("%d\n",-1);
else printf("%d\n",ans);
}
return 0;
}