RE求助
查看原帖
RE求助
218223
chenxsir楼主2020/6/5 13:02
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000010;
const int INF=0x3f3f3f3f;
int n,m,ans=INF,cnt,f[1100],book[1100];
struct pp
{
	int a,b,w;
}side[maxn];
bool cmp(pp a ,pp b)
{
	return a.w<b.w;
}
int find(int x);
int add(int x,int y);
int main()
{
	while(~ scanf("%d%d",&n,&m)&&n)
	{
		for(int i=1;i<=n;i++) f[i]=i;
		cnt=0,ans=INF;
		memset(book,0,sizeof book);
		
		for(int i=1;i<=m;i++)
		{
			scanf("%d%d%d", &side[i].a, &side[i].b, &side[i].w);
		}
		sort(side+1, side+1+m, cmp);
		for(int L=1;L<=m;L++)
		{
			for(int i=1;i<=n;i++) f[i]=i;
			cnt=0;
			memset(book,0,sizeof book);
			int man=0,mi=INF;
			for(int i=L;i<=m;i++)
			{
					int a=side[i].a,b=side[i].b;
					if(find(a)!=find(b)) 
					{
						man=max(man,side[i].w);
						mi=min(mi,side[i].w);
						add(a,b);
					}
					cnt=0;
				for(int j=1;j<=n;j++) if(find(j)==find(1)) cnt++;
//				cout<<cnt<<endl;
				if(cnt==n)
				{
//					cout<<": "<<mi<<" "<<man<<" "<<man-mi<<" ";
//					cout<<L<<" "<<i<<endl;
					ans=min(ans,man-mi);
					break;
				}
			}
		}
		if(ans==INF) ans=-1; 
		printf("%d\n",ans);
	}
}
int find(int x)
{
	return f[x]==x ? x : f[x]=find(f[x]);
}
int add(int x,int y)
{
	int fx=find(x),fy=find(y);
	if(fx!=fy) f[fx]=fy;
}
2020/6/5 13:02
加载中...