kruskal 生成最小树
来源:互联网 发布:sugarnmstool 源码 编辑:程序博客网 时间:2024/06/10 09:55
kruskal 算法在排序上最费时,生成树过程复杂度是线性的,所以最终复杂度为o(|E|log|E|)。
可以对比一下prim算法
传送门》》题目链接
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>#define INF 0x3f3f3f3fusing namespace std;int cost[26][26];int V,E;int par[26];struct edge{int from,to,val;}e;//val from 到 to的距离值edge es[26*13+2];bool cmp(edge x,edge y){return x.val<y.val;}void init(){for(int i=0;i<26;i++) par[i]=i;}int find(int x){return x==par[x]?x:par[x]=find(par[x]);}void unite(int x,int y){par[find(y)]=find(x);}bool same(int x,int y){return find(x)==find(y);}int kruskal(){ sort(es,es+E,cmp); init(); int res=0; for(int i=0;i<E;i++){ if(!same(es[i].from,es[i].to)){ unite(es[i].from,es[i].to); res+=es[i].val; } } return res;}int main(){ while(~scanf("%d",&V)&&V){ memset(cost,0x3f,sizeof(cost)); int N,val;char a[2],b[2]; E=0; for(int i=0;i<V-1;i++){ scanf("%s%d",a,&N); if(N<=0) continue; int x=*a-'A'; while(N--){ scanf("%s%d",b,&val); int y=*b-'A'; es[E].from=x;es[E].to=y;es[E].val=val;E++; } } printf("%d\n",kruskal()); } return 0;}
0 0
- kruskal 生成最小树
- 图生成最小树
- ZOJ 1203 Swordfish(Kruskal 最小树)
- 求最小树的Kruskal算法
- Prim算法生成最小树 Powerby KTL
- 最小树 次小树 模板
- 最小树(一)(prim最小生成树)
- 最小树(二)(最小生成树prim)
- 最小树Prime算法
- 图-最小树
- 最小树结构-普利姆
- POJ1258最小树水。。
- kruscal最小树
- hdu4756 最小树+树形dp
- 最小树-克鲁斯卡尔
- hdu4081 最小树+DFS或者次小树的变形
- 小树
- NEFU OJ 205 最小树(一)
- 编程艺术之1.1旋转字符串_test3
- uva10943
- 《研制总要求》与《需求规格说明书》的区别
- toast里面有一个setview方法
- php扩展SeasLog应用于 yii2 组件
- kruskal 生成最小树
- 1077. Kuchiguse (20)-字符串处理
- 自定义悬浮窗
- leetcode - 31 Next Permutation
- 初识hibernate
- BZOJ 1085: [SCOI2005]骑士精神 IDA* 估价函数
- 『 Jack_a_Lent_Notes』---常见运算放大器电路&线性调整器&模拟滤波器(部分)
- 97. Interleaving String
- (转)选择结构if语句和switch语句的区别