(UVA1395)Slim Span(A)
来源:互联网 发布:python 爬虫 去标签 编辑:程序博客网 时间:2024/06/06 15:37
どこでもドア:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4141
生成一颗最大权值与最小权值相差最小的树。输出最大最小权值的差。
kruscal算法。按权值排序后遍历可能的生成树,找权差最小的。
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>#include<sstream>#include<set>#include<cstdlib>#include<map>#include<queue>#include<vector>#include <utility> // std::pair, std::make_pairusing namespace std;typedef long long LL;const int INF = 0x3f3f3f3f;//最大值const int N=102;int edge[N][N];int p[N];int n,m;vector<pair<int, int>> vec;int find(int x){ return p[x]==x? x : p[x]=find(p[x]);}void unit(int x,int y){ int a=find(x); int b=find(y); if(a!=b) p[a]=b;}int krus(int x){ int cnt=0; int fx=vec[x].first; int fy=vec[x].second; for(int i=0;i<=n;i++){ p[i]=i; } for(int i=x;i<m;i++){ int ex=vec[i].first; int ey=vec[i].second; if(find(ex)!=find(ey)){ cnt++; if(cnt==n-1) return edge[ex][ey]-edge[fx][fy]; unit(ex,ey); } } return INF;}bool cmd(pair<int, int> a,pair<int, int> b){ return edge[a.first][a.second]<edge[b.first][b.second];}int sel(){ if(m<n-1||krus(0)==INF) return -1; int ans=INF; sort(vec.begin(),vec.end(),cmd); for(int i=0;i<m;i++) { int a=krus(i); if(a==INF) continue; ans=min(ans,a); } return ans;}int main(){ while(~scanf("%d%d",&n,&m)&&!(n==0&&m==0)) { memset(edge,0,sizeof(edge)); vec.clear(); for(int i=0;i<m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); edge[x][y]=edge[y][x]=z; vec.push_back(make_pair(x, y)); } cout<<sel()<<endl; } return 0;}
0 0
- (UVA1395)Slim Span(A)
- uva1395 Slim Span
- [生成树][Uva1395][Slim Span]
- Uva1395——Slim Span
- UVA1395 Slim Span(kruskal算法)
- UVA1395[Slim Span] Kruskal模板题
- Uva1395 Slim Span(最小生成树)
- Uva1395.Slim Span(最小生成树变形)
- UVa1395&POJ3522--Slim Span【kruskal】瓶颈生成树
- UVa1395 && POJ 3522 Slim Span [最小生成树]
- UVA1395-Slim Span(最小生成树Kruskal、并查集)
- 苗条的生长树slim span,uva1395——最小生成树,kruskal
- Slim Span
- Slim Span
- Slim Span
- Slim Span
- Slim Span
- Slim Span
- 设计模式--观察者模式
- 欢迎使用CSDN-markdown编辑器
- 求最大公约数和最小公倍数
- c语言实现冒泡排序
- 反射详解!
- (UVA1395)Slim Span(A)
- 10.31 NOIP模拟赛 (afternoon)
- ssh整合(4)Spring与hibernate整合
- (译)LearnOpenGL实际案例Breakout(十):能量块
- 通过自带SSH框架的搭建过程注意和jar包解释
- 233. Number of Digit One
- android 自定义view实现表盘效果
- Linux getpid函数
- 二叉树遍历应用114. Flatten Binary Tree to Linked List