#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
int n,m,a,b,len,pre[110];
struct node
{
int d1,d2,l;
}e[10010];
bool com(node x,node y)
{
return x.l<y.l;
}
int fin(int x)
{
int p,a;
p=x;
while(x!=pre[x]) x=pre[x];
while(p!=x)
{
a=pre[p];
pre[p]=x;
p=a;
}
return x;
}
void work(int x)
{
int u=fin(e[x].d1);
int v=fin(e[x].d2);
if(u!=v)
{
if(u>v) swap(u,v);
pre[v]=u;
}
fin(e[x].d1);fin(e[x].d2);
}
void work_pre()
{
for(int i=0;i<=n;i++) pre[i]=i;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0) break;
for(int i=0;i<m;i++)
scanf("%d%d%d",&e[i].d1,&e[i].d2,&e[i].l);
sort(e,e+m,com);
int flag=0;
for(int i=0;i<=n;i++) pre[i]=i;
int ans=inf;
for(int i=0;i<m;i++)
{
work_pre();
work(i);
for(int j=i;j<m;j++)
{
work(j);
int no=0;
for(int k=1;k<=n;k++)
{
if(fin(k)!=1)
{
no=1;
break;
}
}
if(no==0)
{
ans=min(ans,(e[j].l-e[i].l));
break;
}
if(j==(m-1)&&no)
{
flag=1;
break;
}
}
if(flag) break;
}
if(ans==inf) printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}
紫书uva1395(苗条的生成树)
猜你喜欢
转载自blog.csdn.net/qq_41758381/article/details/84562242
今日推荐
周排行