(UVa 1395)Slim Span (苗条的生成树)(并查集+Kruskal)
2017-12-31 15:57
316 查看
https://vjudge.net/problem/UVA-1395
题意:给出一个n(n<=100)节点的图,求苗条度(最大边减最小边的值)尽量小的生成树
分析: 按权值从小到大排序。 对于一个连续的边集区间[L,R],如果这些边使得n个点全部联通,则存在一个苗条度不超过W[R]-W[L]的生成树。
题意:给出一个n(n<=100)节点的图,求苗条度(最大边减最小边的值)尽量小的生成树
分析: 按权值从小到大排序。 对于一个连续的边集区间[L,R],如果这些边使得n个点全部联通,则存在一个苗条度不超过W[R]-W[L]的生成树。
#include <cstdio> #include <iostream> #include <vector> #include <string> #include <cstring> #include <algorithm> using namespace std; #define mem(a,n) memset(a,n,sizeof(a)) #define rep(i,a,n) for(int i=a;i<n;i++) #define pb push_back #define fi first #define se second typedef long long ll; typedef unsigned long long ull; const double eps=1e-6; const int INF=0x3f3f3f3f; const int mod=1e9+7; const int N=5e3+5; struct edge { int u,v,w; bool operator < (const edge& m)const { return w<m.w; } } e ; int n,m; int par[105]; ///初始化 void init(int n) { rep(i,0,n+1) par[i]=i; } /*int Find(int x) { return par[x]==x?x:Find(par[x]); }*/ ///找根 int Find(int x) { int rt=x; while(rt!=par[rt]) rt=par[rt];///找根rt int tmp=x; while(tmp!=rt)///将x到rt路径上的点的父节点的根都置为rt { int m=par[tmp]; par[tmp]=rt; tmp=m; } return rt; } ///判断是否在同一个连通分量 bool same(int x,int y) { return Find(x)==Find(y); } ///合并到同一个连通分量 void unite(int x,int y) { x=Find(x); y=Find(y); if(x!=y) par[x]=y; } int main() { while(~scanf("%d%d",&n,&m)&&n+m) { rep(i,1,m+1) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); sort(e+1,e+1+m); int r,mn,mx,ans=INF; rep(l,1,m+1) { int cnt=0; mn=INF,mx=0; init(n); rep(i,l,m+1) { if(!same(e[i].u,e[i].v)) { unite(e[i].u,e[i].v); cnt++; mn=min(mn,e[i].w); mx=max(mx,e[i].w); } if(cnt==n-1) { ans=min(ans,mx-mn); break; } } } printf("%d\n",ans==INF?-1:ans); } return 0; }
相关文章推荐
- UVA 1395 Slim Span--苗条的生成树(并查集+枚举)
- 例题11-2 UVA - 1395 Slim Span 苗条的生成树(Kruscal最小生成树)
- 11.2.2 例题 11-2 UVA 1395 Slim Span (最大值-最小值尽可能小的生成树)
- 苗条的生长树slim span,uva1395——最小生成树,kruskal
- 【UVA 1395】 Slim Span (苗条树)
- UVA-1395 - Slim Span(kruskal)
- UVA 1395 Slim Span 最小生成树
- uva 1395 - Slim Span(生成树)
- UVa 1395 Slim Span (最小生成树)
- UVA 1395 Slim Span 最小生成树
- uva 1395 Slim Span (克鲁斯卡尔变形)
- UVA1395 苗条的生成树
- uva 1395 Slim Span[最小生成树]
- [枚举最小瓶颈生成树]UVa-1395 - Slim Span(kruskal)
- UVA1395 Slim Span(枚举最小生成树)
- uva 1395 - Slim Span poj 3522 Slim Span(最小生成树算法)
- UVa 1395 Slim Span (最小生成树)
- UVa - 1395 - Slim Span(Kruskal算法+并查集,最小生成树)
- 苗条的生成树(uva 1395)
- UVA 1395 Slim Span(kruskal算法)