codevs 2627_村村通_最小生成树
2017-01-18 17:54
393 查看
题目描述
你将得到一份各农场之间连接费用的列表(邻接矩阵),你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过100000思路
一个最小生成树,然后怕超时用了一下并查集优化的克鲁斯卡尔然后数组开太大暴了一次
O(n log n)
#include <stdio.h> #include <algorithm> using namespace std; int f[10000],b[1000][1000]; struct arr { int x,y,z; }; arr a[10000]; int cam(arr x,arr y) { return x.z<y.z; } int find(int x) { if (!f[x]) return x; f[x]=find(f[x]); return f[x]; } 4000 int insert(int x,int y) { if (find(x)!=find(y)) { f[find(x)]=find(y); return 1; } return 0; } int main() { int n; scanf("%d",&n); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) scanf("%d",&b[i][j]); int k=0; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) if (i!=j&&b[i][j]!=0) { k++; a[k].x=i; a[k].y=j; a[k].z=b[i][j]; } sort(a+1,a+k+1,cam); int tot=0; for (int i=1;i<=k;i++) { if (find(a[i].x)!=find(a[i].y)) { tot+=a[i].z; insert(a[i].x,a[i].y); } } printf("%d\n",tot); }
相关文章推荐
- codevs 2627 村村通(最小生成树)
- 2627 村村通 (最小生成树)
- 【最小生成树】CODE[VS] 2627 村村通
- 【codevs 1078】最小生成树
- codevs 1231 最优布线问题(最小生成树模板)
- 【codevs 2627】村村通
- codevs 2627村村通(最小生成树)
- <最小生成树模板·kruskal> 村村通、繁忙的都市
- 【codevs】2627 村村通 kruskal
- codevs 2627 村村通
- codevs 1078 最小生成树 解题报告
- 【codevs 1078】最小生成树
- [SDUT](3362)数据结构实验之图论六:村村通公路 ---最小生成树(图)
- CODEVS 1003 并查集缩点+最小生成树
- 【最小生成树】洛谷 P1536 村村通
- codevs 1519 过路费(最小生成树+LCA)
- codevs 1519 过路费 最小生成树+倍增
- CODEVS 1078 最小生成树
- codevs 1078 最小生成树
- 【codevs 1078】最小生成树