NOIP 边权差值最小的生成树(小数据)
来源:互联网 发布:php编写的网站 编辑:程序博客网 时间:2024/05/18 22:08
NOIP 边权差值最小的生成树(小数据)
2017年7月15日
Kruskal算法
因为根据Kruskal算法的原理,最小生成树的最短边确定后,最长边也相应确定,他们的差值就确定(参见《算法导论》)。所以可以枚举最短边求出生成树。
仅限小数据。
#include<iostream>#include<cstdio>#include<string>#include<algorithm>#include<cstring>using namespace std;int N, M;struct Edges{ int x, y, v;}V[4000];int ans = 0;int MinDif = 52013140;//int FatherVertex[500];bool cmp(Edges a, Edges b){return a.v < b.v;}inline void UnionVertex(int a, int b){ FatherVertex[FatherVertex[a]] = FatherVertex[b];}inline void ResetFatherVertex(){ for(int i = 1; i <= N; i++) FatherVertex[i] = i;}inline int GetFatherVertex(int a){ if(FatherVertex[a] == a) return a; FatherVertex[a] = GetFatherVertex(FatherVertex[a]); return FatherVertex[a];}void Putin(){ cin >> N >> M; memset(FatherVertex, -1, sizeof(FatherVertex)); int a, b, c; for(int i = 1; i <= M; i++){ cin >> a >> b >> c; V[++ans].x = a; V[ans].y = b; V[ans].v = c; } for(int i = 1; i <= N; i++) FatherVertex[i] = i; sort(V + 1, V + 1 + M, cmp);}void Kruskal(int T){ ResetFatherVertex(); int upEdge = -1, downEdge = 100000; int sum = 0; for(int i = T; i <= M; i++){ if(GetFatherVertex(V[i].x) != GetFatherVertex(V[i].y)){ UnionVertex(V[i].x, V[i].y); upEdge = max(upEdge, V[i].v); downEdge = min(downEdge, V[i].v); sum++; } } if(sum == N - 1) MinDif = min(abs(upEdge - downEdge), MinDif);}int main(){ Putin(); for(int i = 1; i <= M - N + 1; i++) Kruskal(i); if(MinDif > 42012140){ cout << -1 << endl; return 0; } cout << MinDif << endl; return 0;}
阅读全文
0 0
- NOIP 边权差值最小的生成树(小数据)
- POJ 3522 最大边与最小边差值最小的生成树(最小生成树的性质)
- poj3522(求最大边最小边差值最小的生成树)
- POJ3522差值最小的生成树
- poj3522求一棵生成树使最大的边和最小的边差值最小
- POJ 3522 最大边与最小边差值最小的生成树
- POJ3522Slim Span(最大边与最小边差值最小的生成树)
- Slim Span 求一颗生成树 使得最大边与最小边的差值最小
- PKU3522(Slim Span)-求差值最小的生成树
- POJ 3522 Slim Span(最小差值生成树)
- POJ 1789 权值为字符串差值的最小生成树
- poj3522 Slim Span 最长边与最短边差值最小的生成树,kruskal算法 + 暴力枚举
- Poj 3522 最长边与最短边差值最小的生成树
- 【NOIP 模拟题】最小生成树(Tarjan求桥)
- 【题解】NOIP 2013 货车运输(最小生成树+LCA)
- [NOIP模拟][最小生成树]Roads
- 【NOIP模板】 最小生成树 kruskal
- NOIP模拟 图【最小生成树】
- 面试经历7
- POJ 3139 Balancing the Scale 笔记
- .gitignore-过滤工程中所有无用文件
- 使用BottomNavigationBar来实现底部导航
- PolyNet A pursuit of structural diversity in very deep networks(翻译笔记)
- NOIP 边权差值最小的生成树(小数据)
- leetcode#541. Reverse String II
- bzoj 2405: 数字 数学
- Java多态
- mysql表组成
- HUD 1004
- Android Apk瘦身实践
- 【STL】CodeForces
- Shell 脚本学习记录(一)