【NYOJ 38 K r u s k a l】
来源:互联网 发布:7寸windows平板 编辑:程序博客网 时间:2024/05/20 09:21
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38
/*
问题描述:给定一个图求最小生成树思路: K r u s k a l算法每次选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。K r u s k a l算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环路,则将其抛弃,否则,将它选入。利用并查集的求法判断是否会构成回路:若他们根节点不同则不会有环*/#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct Edge{ int a,b; int cost;}edge[505*505/2];int father[505];int d[505];int v,e;int cmp(Edge x,Edge y){ return x.cost<y.cost;}int ifind(int x){ if(x==father[x]) return x; father[x]=ifind(father[x]); return father[x];}int Union(int x,int y){ int f1=ifind(x); int f2=ifind(y); if(f1==f2) return false; if(f1>f2) f2[father]=f1; else f1[father]=f2;}int kurukal(){ int sum=0; for(int i=1;i<=v;i++) father[i]=i; sort(edge+1,edge+e+1,cmp); for(int i=1;i<=e;i++){ if(Union(edge[i].a,edge[i].b)){ sum+=edge[i].cost; } } return sum;}int main(){ int test; scanf("%d",&test); while(test--){ scanf("%d%d",&v,&e); for(int i=1;i<=e;i++){ scanf("%d%d%d",&edge[i].a,&edge[i].b,&edge[i].cost); } for(int i=0;i<v;i++){ scanf("%d",&d[i]); } sort(d,d+v); printf("%d\n",kurukal()+d[0]); }}
0 0
- 【NYOJ 38 K r u s k a l】
- 如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- J。。L。。O。。K。。Y。。S
- 2017年5月21、22日r-u-a-n-k-a-o整理
- R F C S D K
- ch10_ex23 以L.r[k+1]作为监…
- !EProt v0.01 beta by g-l-u-k
- 【Codeforces Round 339 (Div 2)A】【水题 暴力】 LinkCut Tree 输出[l,r]范围内所有的k的幂数
- H a r d F a u l t
- 泛泰 IM 870 L/S/K 通用LED闪烁方案
- K-L变换
- k-l变换原理
- K-L变换
- (L)ittle (K)ernelbootloader
- L-K光流法
- 离散K-L变换
- Linux实用快捷键---Ctrl+u;Ctrl+r;Ctrl+k
- SIFT、SURF特征匹配点的坐标获取\及匹配应用
- C语言指向指针的指针
- 代码面试最常用的10大算法
- andorid 探测总线设备驱动
- java提高篇(二)-----理解java的三大特性之继承
- 【NYOJ 38 K r u s k a l】
- 逆波兰表示法RPN 实现
- java提高篇(三)-----理解java的三大特性之多态
- 严打电脑城预装盗版软件
- Access模糊查询
- 常用的几种设计模式
- Python3.4【文本】之translate
- Android多线程下安全访问数据库
- how about broadcasting