您的位置:首页 > 其它

uva 1395 - Slim Span(生成树)

2015-09-11 21:46 302 查看
题目链接:uva 1395 - Slim Span

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;
const int maxn = 105;
const int inf = 0x3f3f3f3f;

struct Edge {
int u, v, d;
bool operator < (const Edge& a) const { return d < a.d; }
}E[maxn * maxn];

int N, M, F[maxn], ans;

int find(int x) { return x == F[x] ? x : F[x] = find(F[x]); }

int solve (int s) {
int n = N;
for (int i = 1; i <= N; i++) F[i] = i;

for (int i = s; i < M; i++) {
int u = E[i].u, v = E[i].v;
if (E[i].d - E[s].d >= ans) break;
if (find(u) != find(v)) {
if (--n == 1) return E[i].d - E[s].d;
F[find(u)] = find(v);
}
}
return inf;
}

int main () {
while (scanf("%d%d", &N, &M) == 2 && N + M) {
for (int i = 0; i < M; i++)
scanf("%d%d%d", &E[i].u, &E[i].v, &E[i].d);
sort(E, E + M);
ans = inf;
for (int i = 0; i <= M - N + 1; i++)
ans = min(ans, solve(i));
printf("%d\n", ans == inf ? -1 : ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: