比赛 |
NOIP水题争霸赛 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
最小差异值 |
最终得分 |
100 |
用户昵称 |
313 |
运行时间 |
2.621 s |
代码语言 |
C++ |
内存使用 |
0.27 MiB |
提交时间 |
2018-02-11 21:31:25 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define il inline
#define db double
using namespace std;
il int gi()
{
int x=0,y=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
y=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*y;
}
il ll gl()
{
ll x=0,y=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
y=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*y;
}
struct edge
{
int a,b;
ll dis;
}e[5045];
bool cmp(edge x,edge y)
{
return x.dis<y.dis;
}
int fa[5045];
int find(int x)
{
if(fa[x]!=x)
fa[x]=find(fa[x]);
return fa[x];
}
int n,m,x,y,z,now;
il bool hzr(int x,int y)
{
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=x;i<=y;i++)
{
int r1=find(e[i].a),r2=find(e[i].b);
if(r1!=r2)
{
now++;
fa[r2]=r1;
}
}
}
int main()
{
freopen("dvalue.in","r",stdin);
freopen("dvalue.out","w",stdout);
n=gi(),m=gi();
for(int i=1;i<=m;i++)
{
x=gi(),y=gi(),z=gl();
e[i].a=x;
e[i].b=y;
e[i].dis=z;
}
sort(e+1,e+1+m,cmp);
ll minx=1e16;
for(int i=1;i<=m-n+2;i++)
{
now=0;
hzr(i,i+n-2);
if(now==n-1)
{
if(e[i+n-2].dis-e[i].dis<minx)
minx=e[i+n-2].dis-e[i].dis;
continue;
}
for(int j=i+n-1;j<=m;j++)
{
int r1=find(e[j].a),r2=find(e[j].b);
if(r1!=r2)
{
now++;
fa[r2]=r1;
}
if(now==n-1)
{
if(e[j].dis-e[i].dis<minx)
minx=e[j].dis-e[i].dis;
break;
}
}
}
printf("%lld\n",minx);
return 0;
}