-
Slim Span
- POJ - 3522
- 题意:找一种生成树建树方法使最大最小的差最小 。
- 枚举枚举最小边即可注意一旦生不成树break即可.
-
#include<stdio.h> #include<cstring> #include<algorithm> using namespace std; #define maxn 10002 #define inf 0x3f3f3f3f struct node { int x,y,z; } edge[maxn]; int fa[maxn],num,ans,minn,n,m; int fond(int x) { return x==fa[x]?x:fa[x]=fond(fa[x]); } bool cmp(node a,node b) { return a.z<b.z; } void init() { for(int i=1; i<=n; i++) fa[i]=i; } int kruskal(int s) { init(); int x,y; num=n; ans=-1; for(int i=s; i<m; i++) { x=fond(edge[i].x); y=fond(edge[i].y); if(x==y) continue; fa[x]=y; num--; if(num==1) { ans=edge[i].z; break; } } return ans-edge[s].z; } int main() { while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; for(int i=0; i<m; i++) scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].z); sort(edge,edge+m,cmp); minn=kruskal(0); if(minn<0) { printf("-1\n"); continue; } for(int i=1; i<m; i++) { int temp=kruskal(i); if(temp<0) break; minn=min(minn,temp); } printf("%d\n",minn); } return 0; }
Slim Span -生成树性质-枚举最小树
最新推荐文章于 2022-12-18 00:41:35 发布