poj2395 Kruskal最小生成树
来源:互联网 发布:php大神博客 编辑:程序博客网 时间:2024/05/04 04:55
/** * poj2395 最小生成树 Kruskal算法(加边法) * 就是个最小生成树,只是记录的是最大边的边长而已。环路检测可以用并查集。并查集好多次忘了要用父点做为操作点了,WA了好多次 */#include <cstdio>#include <algorithm>using namespace std;struct road{ int a; int b; int dist;}r[10001];int n,m;int father[2001];int points[2001];int max_len=0;bool cmp(const road &a,const road &b){ return a.dist < b.dist;}int min(int a,int b){ return a<b?a:b;}int getfather(int x){ if(x==father[x]){ return x; } else{ return father[x]=getfather(father[x]); }}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i){ father[i] = i; exist[i] = false; points[i] = 1; } for(int i=1;i<=m;++i){ scanf("%d%d%d",&r[i].a,&r[i].b,&r[i].dist); } sort(r+1,r+m+1,cmp); int s_idx,b_idx,fa,fb; for(int i=1;i<=m && points[1]<n;++i){ if(i>1){ if(r[i-1].a == r[i].a && r[i-1].b == r[i].b){ continue;//重边检测 } } fa = getfather(r[i].a); fb = getfather(r[i].b); if(fa != fb){//检测有无环路 s_idx = min(fa,fb); b_idx = fa+fb-s_idx; father[b_idx] = getfather(s_idx); points[s_idx] += points[b_idx]; if(max_len < r[i].dist){ max_len = r[i].dist; } } } printf("%d\n",max_len); return 0;}
0 0
- poj2395 Kruskal最小生成树
- POJ2395(最小生成树Kruskal算法)
- poj2395 最小生成树
- POJ2395最小生成树水
- poj2395(最小生成树)
- POJ2395 Out of Hay 最小生成树
- 最小生成树的最大边poj2395
- POJ2395 Out of Hay 最小生成树
- poj2395(最小生成树最大边)
- POJ2395 最小生成树prim算法
- POJ2395 Out of Hay(最小生成树)
- poj2395 Out of Hay(最小生成树)
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树 kruskal
- kruskal 最小生成树
- 最小生成树-Kruskal
- 最小生成树kruskal
- http 405错误
- poj2352 树状数组
- poj2379 排序
- javaSE--随机数的两种获取方式
- CF403B/CF402D
- poj2395 Kruskal最小生成树
- Floyd算法介绍
- VB函数分析
- poj2418 二叉排序树
- 【实现】实现随机点名的签到程序
- [转载]软件开发者的四大“看家本事”
- 马来西亚大皇宫工行客服好看刚才打开空间法规处
- poj2426 BFS
- 我们的项目中的技术(一)