codevs 1078 最小生成树 kruskal
2016-04-16 00:33
447 查看
题目描述 Description
农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了使花费最少,他想铺设最短的光纤去连接所有的农场。 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。 每两个农场间的距离不会超过100000
输入描述 Input Description
第一行: 农场的个数,N(3<=N<=100)。
第二行..结尾: 接下来的行包含了一个N*N的矩阵,表示每个农场之间的距离。理论上,他们是N行,每行由N个用空格分隔的数组成,实际上,他们每行限制在80个字符以内,因此,某些行会紧接着另一些行。当然,对角线将会是0,因为线路从第i个农场到它本身的距离在本题中没有意义。
输出描述 Output Description
只有一个输出,是连接到每个农场的光纤的最小长度和。
样例输入 Sample Input
4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0
样例输出 Sample Output
28
数据范围及提示 Data Size & Hint
题意: 最小生成树
题解: kruscal 模板题目
注意wa点
农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了使花费最少,他想铺设最短的光纤去连接所有的农场。 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。 每两个农场间的距离不会超过100000
输入描述 Input Description
第一行: 农场的个数,N(3<=N<=100)。
第二行..结尾: 接下来的行包含了一个N*N的矩阵,表示每个农场之间的距离。理论上,他们是N行,每行由N个用空格分隔的数组成,实际上,他们每行限制在80个字符以内,因此,某些行会紧接着另一些行。当然,对角线将会是0,因为线路从第i个农场到它本身的距离在本题中没有意义。
输出描述 Output Description
只有一个输出,是连接到每个农场的光纤的最小长度和。
样例输入 Sample Input
4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0
样例输出 Sample Output
28
数据范围及提示 Data Size & Hint
题意: 最小生成树
题解: kruscal 模板题目
注意wa点
#include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<algorithm> #include<stack> using namespace std; struct node { int l; int r; int v; }N[11000]; int fa[101]; int n; int jishu; int exm; bool cmp(struct node aa,struct node bb) { if(aa.v<bb.v)//wa 点!!! return true; return false; } void init() { for(int i=1;i<n;i++) fa[i]=i; } int find(int root) { if(root!=fa[root]) return fa[root]=find(fa[root]); else return fa[root]; } void unio(int a,int b) { int aa=find(a); int bb=find(b); if(aa!=bb) fa[aa]=bb; } void kruscal() { int ans=0; for(int i=0;i<jishu;i++) { int q=find(N[i].l); int w=find(N[i].r); if(q!=w) { n--; unio(q,w); ans+=N[i].v; } if(n==1) break; } cout<<ans<<endl; } int main() { while(scanf("%d",&n)!=EOF) { init(); jishu=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&exm); N[jishu].l=i; N[jishu].r=j; N[jishu++].v=exm; } sort(N,N+jishu,cmp); kruscal(); } return 0; }
相关文章推荐
- VijosP1180:选课
- IntelliJ IDEA 使用心得与常用快捷键
- java并发的线程安全单例模式
- Hibernate学习总结:OneToOne双向外键关联
- Error:Configuration with name 'default' not found. 解决办法
- [POJ 3276] Face The Right Way (翻转问题+技巧)
- 实例26直接交换两个数的值
- (LeetCode 191) Number of 1 Bits
- 用Python3下载网页图片
- CLM研究
- 【皇甫】☀内侧小解析---小行动(1)
- 安装.NET Framework进度条卡住不动的解决方案
- HDU 4622 Reincarnation 后缀自动机
- Intent详解
- activity与fragment通信汇总
- Flume:本地文件到Kafka
- 292.[LeetCode]Nim Game
- Mybatis学习记录(三)--Mybatis配置文件详解
- 想追她?先算算你要等多久
- Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements