题目背景

农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。

题目描述

约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。

你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过100000

输入输出格式

输入格式:

第一行: 农场的个数,N(3<=N<=100)。

第二行..结尾: 后来的行包含了一个N*N的矩阵,表示每个农场之间的距离。理论上,他们是N行,每行由N个用空格分隔的数组成,实际上,他们限制在80个字符,因此,某些行会紧接着另一些行。当然,对角线将会是0,因为不会有线路从第i个农场到它本身。

输出格式:

只有一个输出,其中包含连接到每个农场的光纤的最小长度。

输入输出样例

输入样例#1:

  1. 4
  2. 0 4 9 21
  3. 4 0 8 17
  4. 9 8 0 16
  5. 21 17 16 0
输出样例#1:

  1. 28

说明

题目翻译来自NOCOW。

USACO Training Section 3.1

1)60代码……

错误原因是?……

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define Maxn 100001
  6.  
  7. using namespace std;
  8.  
  9. int n,c=,f1,f2,tot=,k=;
  10. int f[];
  11.  
  12. struct point{
  13. int x,y,w;
  14. bool operator < (const point &qwq)const
  15. {
  16. return w<qwq.w;
  17. }//重载运算符(多么高大上的东西!但我还是不太明白怎么使用)
  18. }p[Maxn];
  19.  
  20. int find(int x)
  21. {
  22. if(f[x]!=x) f[x]=find(f[x]);
  23. return f[x];
  24. //return x == f[x] ? x : f[x]=find(f[x]);
  25. }
  26.  
  27. int main()
  28. {
  29. int v;
  30. scanf("%d",&n);
  31. for(int i=;i<=n;i++)
  32. {
  33. for(int j=;j<=n;j++)
  34. {
  35. scanf("%d",&v);
  36. if(v!=)
  37. {
  38. c++;
  39. p[c].x=i;
  40. p[c].y=j;
  41. p[c].w=v;
  42. }
  43. }
  44. }
  45. for(int i=;i<=c;i++) f[i]=i;
  46. sort(p+,p+c+);//快排
  47. for(int i=;i<=c;i++)
  48. {
  49. f1=find(p[i].x);
  50. f2=find(p[i].y);
  51. if(f1!=f2)
  52. {
  53. f[f1]=f2;
  54. tot+=p[i].w;
  55. k++;
  56. }
  57. if(k==n-) break;
  58. }
  59. printf("%d",tot);
  60. return ;
  61. }

2)AC代码~我重新写了!

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cmath>
  4. #include<iostream>
  5. #include<algorithm>
  6.  
  7. using namespace std;
  8.  
  9. int n,Mst;
  10. int f[];
  11.  
  12. struct hh
  13. {
  14. int a,b,c;
  15. bool operator < (const hh &ww)const
  16. {
  17. return c < ww.c;
  18. }
  19. }d[];
  20.  
  21. int find(int l)
  22. {
  23. return l == f[l] ? l : find(f[l]);
  24. }
  25.  
  26. int main()
  27. {
  28. cin>>n;
  29. for(int i=;i<=n;i++)
  30. for(int j=;j<=n;j++)
  31. {
  32. cin>>d[(i-)*n+j].c;//进行“超边处理”,使d能够“连接”起来
  33. d[(i-)*n+j].a=i;
  34. d[(i-)*n+j].b=j;
  35. }
  36. sort(d+,d+n*n+);//快排
  37. for(int i=;i<=n;i++)
  38. f[i]=i;
  39. int xx=,i=;
  40. while(xx<n-)
  41. {
  42. i++;
  43. int r1=find(d[i].a);
  44. int r2=find(d[i].b);
  45. if(r1!=r2)
  46. {
  47. f[r1]=r2;
  48. xx++;
  49. Mst+=d[i].c;
  50. }
  51. }
  52. cout<<Mst;
  53. }

洛谷 P1546 最短网络 Agri-Net x的更多相关文章

  1. 洛谷 P1546 最短网络 Agri-Net

    题目链接 https://www.luogu.org/problemnew/show/P1546 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当 ...

  2. 洛谷P1546 最短网络 Agri-Net(最小生成树,Kruskal)

    洛谷P1546 最短网络 Agri-Net 最小生成树模板题. 直接使用 Kruskal 求解. 复杂度为 \(O(E\log E)\) . #include<stdio.h> #incl ...

  3. 洛谷P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 526通过 959提交 题目提供者JOHNKRAM 标签图论贪心USACO 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 50分C++代码,求解 请指 ...

  4. 洛谷——P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一 ...

  5. 洛谷 P1546 最短网络 Agri-Net Label:Water最小生成树

    题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其 ...

  6. 洛谷 P1546 最短网络 Agri-Net(最小生成树)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P1546 首先不难看出这道题的思想是用了最小生成树,但是这道题有难点: 1.读题读不明白 2.不会读入 ...

  7. 洛谷 P1546 最短网络 Agri-Net(最小生成树)

    题目链接 https://www.luogu.org/problemnew/show/P1546 说过了不复制内容了 显然是个最小生成树. 解题思路 prim算法 Kruskal算法 prim算法很直 ...

  8. 洛谷P1546 最短网络 Agri-Net(Prim堆优化)

    #include<bits/stdc++.h> using namespace std; ; const int INF=0x3f3f3f3f; inline void read(int ...

  9. 洛谷1546 最短网络Agri-Net【最小生成树】【prim】

    [内含最小生成树Prim模板] 题目:https://www.luogu.org/problemnew/show/P1546 题意:给定一个邻接矩阵.求最小生成树. 思路:点少边多用Prim. Pri ...

随机推荐

  1. Map以及HashMap

    本文主要介绍java集合框架的Map集合,在日常生活中Map的运用也十分广泛. 与List集合.Set集合隶属于Collection不同,Map是一个独立的接口,与Collection相同级别的接口. ...

  2. luogu P3320 [SDOI2015]寻宝游戏

    大意:给定树, 要求维护一个集合, 支持增删点, 询问从集合中任取一点作为起点, 遍历完其他点后原路返回的最短长度. 集合中的点按$dfs$序排列后, 最短距离就为$dis(s_1,s_2)+...+ ...

  3. POJ题解Sorting It All Out-传递丢包+倍增

    题目链接: http://poj.org/problem?id=1094 题目大意(直接从谷歌翻译上复制下来的): 描述 不同值的递增排序顺序是其中使用某种形式的小于运算符来将元素从最小到最大排序的顺 ...

  4. Java开发者想尝试转行大数据,学习方向建议?

      ​前言 相信很多Java开发者都对大数据有一定的了解,随着大数据时代的到来,也有很多Java程序员想要转行大数据.大数据技术中大多数平台使用的都是Java语言,因此,对于大数据技术的学习来说,Ja ...

  5. python进阶资源

    本文为不同阶段的Python学习者从不同角度量身定制了49个学习资源. 初学者 Welcome to Python.org https://www.python.org/ 官方Python站点提供了一 ...

  6. python之pymysql

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. 安装: pip3 install PyMySQL 常用参数: pymysq ...

  7. react 中 css模块化类名 和普通全局类名 一起使用

    <div className={[`${styles.tableOpers}`,`clearfix`].join(' ')}></div>

  8. 多个分组树分别实现单选jq+angular

    $scope.seletedGroup=[];var $li=$("#departmentsContainer>ol>li");$.each($li,function( ...

  9. SpringBoot 企业级核心技术学习专题

    专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Boot 核心技术章节源码 Spring Boot 核心技术 ...

  10. cmake编译c++程序

    当在Linux系统下编写程序时候,如果没有类似于visual studio.vs code等IDE(集成开发环境)时,如何编译.运行程序呢?一种方法是编写makefile文件,用makefile文件管 ...