比赛 |
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;
}