UVA
来源:互联网 发布:linux怎么解压tar文件 编辑:程序博客网 时间:2024/05/29 06:48
枚举最小的边权,用剩下来的边建最小生成树即可
#include<iostream>#include<string>#include<cstdio>#include<set>#include<map>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include<cstring>#include<cmath>#include<fstream>using namespace std;typedef long long ll;const int maxn = 10010,INF = 0x3f3f3f3f;int m,n;struct node{ int u,v,w; bool operator < (const node &a) const{ return w < a.w; }};vector<node> e;int fa[maxn];int find(int x){ if (x == fa[x]) return x; else return fa[x] = find(fa[x]);}int kruskal(int st){ int sum = 1,k = st; for(int i = 1;i <= n;++i) fa[i] = i; for(;k < m;++k){ int x = find(e[k].u),y = find(e[k].v); if (x != y) { fa[x] = y; sum++; } if (sum == n) return k; } return -1;}void build(){ int ans = INF; int mark = -1; for(int l = 0;l < m;++l){ if (e[l].w == mark) continue; int r = kruskal(l); if (r != -1){ mark = e[l].w; ans = min(e[r].w - e[l].w,ans); } else break; } if (ans == INF) ans = -1; cout << ans << endl;}void init(){ int u,v,w; e.clear(); for(int i = 0;i < m;++i){ cin >> u >> v >> w; e.push_back({u,v,w}); } sort(e.begin(),e.end()); build();}int main(){ while(cin >> n >> m && n + m){ init(); }}
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- linux命令指南之三
- 第1题 变态跳台阶【剑指Offer编程题】
- Android开发时华为真机调试无法打印日志的解决方法
- C++记录精确时间-QueryPerformanceFrequency()
- Java 调用 BAT 文件
- UVA
- poj1659(纯搜索)
- 个人模板 树状数组
- hadoop——关于网络虚拟化
- Python中运用动态规划解决背包问题
- thinkPHP5小bug之表单令牌
- C#内存映射文件学习总结
- codeforces Gym 101341 I Matrix God
- jsp执行原理