为什么会错?
查看原帖
为什么会错?
104380
garbage2楼主2020/10/6 16:06

洛谷交不了,Vjudge上错了

#include<bits/stdc++.h>
using namespace std;
struct city{
	int u,v;
	int w;
}a[5000];
int fa[105];
int n,m;
bool cmp(city a,city b)
{
	return a.w<b.w;
}
int find(int x)
{
	if(fa[x]==x)
		return x;
	else
		return fa[x]=find(fa[x]);
}
void gui()
{
	int i;
	for(i=1;i<=n;i++)
		fa[i]=i;
}
int main()
{
	while(cin>>n>>m){
		if(n==m&&m==0)
			break;
		int i,j;
		for(i=1;i<=m;i++)
			cin>>a[i].u>>a[i].v>>a[i].w;
		if(m<n-1){
			cout<<"-1\n";
			continue;
		}
		sort(a+1,a+1+m,cmp);
		int minn=0x7ffffff;
		for(j=1;j<=m-n+2;j++){
			gui();
			int sum=0;
			int a1,an;
			for(i=j;i<=m;i++){
				int u=a[i].u,v=a[i].v;
				if(find(fa[u])!=find(fa[v])){
					fa[u]=find(fa[v]);
					sum++;
				}
				if(i==j)
					a1=a[i].w;
				if(sum==n-1){
					an=a[i].w;
					minn=min(minn,an-a1);
					break;
				}
			}
		}
		cout<<minn<<endl;
	}
	return 0;
}
2020/10/6 16:06
加载中...