比赛 NOIP水题争霸赛 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 最小差异值 最终得分 100
用户昵称 Lovelove_boii 运行时间 3.496 s
代码语言 C++ 内存使用 0.19 MiB
提交时间 2018-02-11 21:29:44
显示代码纯文本
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream cin("dvalue.in");
ofstream cout("dvalue.out");
struct road
{
	int u,v,w;
};
int n,m;
road edge[5001];
int union_find[5001];
int ans=250000001;
int Find(int x)
{
	if(union_find[x]==x)
	{
		return x;
	}
	return union_find[x]=Find(union_find[x]);
}
void Union(int r,int s)
{
	int a,b;
	a=Find(r);
	b=Find(s);
	union_find[b]=a;
}
bool cmp(road a,road b)
{
	return a.w<b.w;
}
int main()
{
	cin>>n>>m;
	
	for(int i=1;i<=m;i++)
	{
		cin>>edge[i].u>>edge[i].v>>edge[i].w;
	}
	sort(edge+1,edge+m+1,cmp);
	for(int o=1;o<=m;o++)
	{
		int max_edge=0;
		int cnt=0;
		for(int i=1;i<=n;i++)
		{
			union_find[i]=i;
		}
		for(int i=o;i<=m;i++)
		{
			if(Find(edge[i].u)==Find(edge[i].v))
			{
				continue;
			}
			max_edge=edge[i].w;
			Union(edge[i].u,edge[i].v);
			cnt++;
		}
		if(cnt==n-1)
		{
			ans=min(ans,max_edge-edge[o].w);
		}
	}
	cout<<ans;
	cin.close();
	cout.close();
	return 0;
}