ACM_模板_最小生成树
2016-02-28 23:43
204 查看
最小生成树,其本质还是并查集,经典运用就是Kruskal算法,对边权进行排序后,由小到大进行合并处理,直到形成一颗树为止。
#include<stdio.h>//最小生成树 #include<algorithm> using namespace std; int root[101]; int N,Q,i,j,a,b,d,t,ans; struct road { int s; int e; int d; }edge[5051]; bool cmp(road a,road b) { return a.d<b.d; } int find(int a) { while(a!=root[a]) a = root[a]; return a; } void merge(int a,int b) { a = find(a); b = find(b); if(a != b) root[b] = a; } int main() { while(scanf("%d",&N)!=EOF) { for(i=1;i<101;i++) root[i] = i; t = 0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) { scanf("%d",&d); if(j>=i)continue; edge[t].s = j; edge[t].e = i; edge[t].d = d; t++; } scanf("%d",&Q); while(Q--) { scanf("%d%d",&a,&b); merge(a,b); } sort(edge,edge+t,cmp); ans = 0; for(i=0;i<t;i++) { if(find(edge[i].s) != find(edge[i].e)) { merge(edge[i].s,edge[i].e); ans += edge[i].d; } } printf("%d\n",ans); } }
相关文章推荐
- java 序列化字节流解析
- 手表邮件开发中的Application 和BaseActivity
- Redis学习笔记
- 文档输出格式
- 判断窗口是否在最大化状态和最小化状态
- 忘了和大家说了,注册了个新域名哦~www.maghsk.cn
- SqlServer数据类型
- Spring之不同步的Bean
- javaweb jsp页面上传excel文件
- list和vector的区别
- java.lang.Exception: Exception in sending Request :: null
- hdu 1715 大菲波数
- directshow
- Android--Handler,Looper,MessageQueue的关系
- IOS设计模式-组合设计模式
- 南京2013区域赛C题,HDU4804
- 国家网信办:封杀任志强微博账号,不许注册马甲
- 国家网信办:封杀任志强微博账号,不许注册马甲
- 汉字到拼音的华丽变身
- 看最强大脑