POJ 3522 Kruskal
来源:互联网 发布:环球慧思海关数据登陆 编辑:程序博客网 时间:2024/05/16 21:41
题意:
求一颗生成树,使得边权的最大值与最小值之差最小。如果不能生成树,输出-1。
思路:Kruskal+枚举最短的边。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{ int from,to,weight;}s[10005];int first[10050],next[10050],f[1005],n,m,answer;bool cmp(const node &a,const node &b){ return a.weight<b.weight;}int find(int x){ return f[x]==x?f[x]:f[x]=find(f[x]);}int Kruskal(int k){ int ans=0x3fffffff,cnt=0; for(int i=1;i<=n;i++) f[i]=i; for(int i=k;i<=m;i++) { int fx=find(s[i].from),fy=find(s[i].to); if(fx!=fy) { f[fx]=fy; ans=s[i].weight; cnt++; } } if(cnt==n-1) return ans-s[k].weight; return 0x3fffffff;}int main(){ while(scanf("%d%d",&n,&m)&&(n||m)) { answer=0x3fffffff; for(int i=1;i<=m;i++) { scanf("%d%d%d",&s[i].from,&s[i].to,&s[i].weight); } sort(s+1,s+1+m,cmp); for(int i=1;i<=m;i++) { answer=min(Kruskal(i),answer); } if(answer==0x3fffffff) printf("-1\n"); else printf("%d\n",answer); }}
很少见的一次AC。
0 0
- poj 3522 Kruskal
- poj 3522 枚举+kruskal
- POJ 3522 Kruskal
- POJ 3522 slim span Kruskal
- POJ 3522 Slim Span kruskal+枚举。
- POJ 3522 Slim Span (Kruskal+枚举)
- poj 3522 Slim Span (Kruskal+枚举)
- poj 3522 Slim Span【kruskal算法】
- poj-3522-Slim Span-kruskal活用
- POJ - 3522 Slim Span (kruskal+枚举)
- POJ 3522 生成树(kruskal)
- poj 3522 Slim Span(Kruskal+枚举)
- POJ 2485 Highways Kruskal
- poj 1287 kruskal
- poj 1251(Kruskal)
- poj 1797 kruskal
- POJ 1861 Network(Kruskal)
- poj 1861 kruskal
- maven集成测试
- SwipeRefreshLayout+RecyclerView 下拉刷新
- IOS学习 NSOperation 网络下载图片 涉及plist文件、重用Cell、占位图、缓存池、清理内存
- POJ 1383 Labyrinth(双次BFS)
- 杭电ACM题1007
- POJ 3522 Kruskal
- jQuery——小案例:点击图片放大缩小
- easyui + jquery 提交form表单 jquery submit失效
- Android学习之ScrollView使用文档翻译
- 拆分上中下div 且div中嵌套多个横排或竖排div
- spring(11)------spring国际化支持
- 网络:XML 解析之下拉刷新界面(手写代码添加)
- 感知机
- LeetCodet题解--20. Valid Parentheses(括号匹配问题)