比赛 |
NOIP水题争霸赛 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
最小差异值 |
最终得分 |
100 |
用户昵称 |
suzihan03 |
运行时间 |
2.970 s |
代码语言 |
C++ |
内存使用 |
0.29 MiB |
提交时间 |
2018-02-11 21:15:53 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
struct Edge {
int u, v, len;
inline bool operator<(const Edge & rhs) const { return len < rhs.len; }
};
const int MAXM = 5000, MAXN = 5000, INF = 0x3f3f3f3f;
int N, M, Fa[MAXN+10]; Edge E[MAXM+10];
void Init() {
int u, v, c;
scanf("%d%d", &N, &M);
for(int i=1; i<=M; i++) {
scanf("%d%d%d", &u, &v, &c);
E[i] = (Edge) { u, v, c };
}
sort(E+1, E+M+1);
}
inline void Reset() {
for(int i=1; i<=N; i++) Fa[i] = i;
}
int GetFather(int x) {
return x == Fa[x] ? x : Fa[x] = GetFather(Fa[x]);
}
inline void Union(int x, int y) {
Fa[GetFather(x)] = GetFather(y);
}
void Work() {
int Ans = INF, Cnt = 0;
for(int i=1, j; i<=M; i++) {
Reset(); Cnt = 0;
for(j=i; j<=M; j++) {
if(GetFather(E[j].u) == GetFather(E[j].v))
continue;
++Cnt; Union(E[j].u, E[j].v);
if(Cnt == N - 1) break;
}
if(Cnt == N - 1)
Ans = min(Ans, E[j].len - E[i].len);
}
printf("%d", Ans);
}
int main() {
#ifndef DEBUG
freopen("dvalue.in", "r", stdin);
freopen("dvalue.out", "w", stdout);
#endif
Init(); Work();
}