洛谷Oj-最短网络 Agri-Net-最小生成树(模板题)
来源:互联网 发布:发帖软件 编辑:程序博客网 时间:2024/05/21 00:55
问题描述:
约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。
你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过100000
AC代码:
int boss[110];struct edge//最小生成树要这样建立结构体{ int x; int y; int w;};edge e[10010];bool cmp(const edge &a,const edge &b){ return a.w < b.w;}int get_boss(int x){ if(boss[x] == x) return x; else return boss[x] = get_boss(boss[x]);}void merge(int x,int y){ int bx = get_boss(x); int by = get_boss(y); if(bx != by) boss[by] = bx; return;}bool query(int x,int y){ int bx = get_boss(x); int by = get_boss(y); return bx == by;}int main(){ int n,s = 1; cin >> n; for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) { int w; scanf("%d",&w); if(w == 0) continue; e[s].x = i; e[s].y = j; e[s].w = w; s++; } for(int i = 1; i <= n; ++i) boss[i] = i; sort(e + 1,e + s,cmp); int sum = 0,cnt = 0; for(int i = 1; i <= s - 1; ++i) { if(query(e[i].x,e[i].y) == false) { merge(e[i].x,e[i].y); cnt++; sum += e[i].w; } if(cnt == n - 1) break; } printf("%d\n",sum); return 0;}
解决方法:
这次的最小生成树模板比之前的美观了许多,所以发上来作为今后的模板
阅读全文
0 0
- 洛谷Oj-最短网络 Agri-Net-最小生成树(模板题)
- 最小生成树基础模板题(USACO Training Section 3.1 最短网络 Agri-Net)
- 【最小生成树】洛谷 P1546 最短网络 Agri-Net
- 【USACO】Agri-Net最短网络(最小生成树)
- 【最小生成树】Agri-Net最短网络
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- [最小生成树]USACO 3.1 Agri-Net 最短网络
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1.1 Agri-Net 最短网络(最小生成树Prime算法)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)(改)
- WUST 1944 最短网络Agri-Net(最小生成树之prim算法)
- Java Number & Math 类
- Linux 安装JDK
- Mac常用快捷键一览
- 华为面经
- [uva-352]The Seasonal War (dfs和bfs两种
- 洛谷Oj-最短网络 Agri-Net-最小生成树(模板题)
- Java Character 类
- 显示调用析构函数被g++编译器优化掉不执行
- 修改Linux系统的主机名
- imx6学习笔记
- 2017.10.1 互不侵犯king 思考记录
- KD-tree的原理以及构建与查询操作的python实现
- redis安装make失败
- bzoj2839集合计数 容斥原理