`
Simone_chou
  • 浏览: 192638 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Agri-Net(最小生成树 + 并查集)

 
阅读更多
Agri-Net
Russ Cox

Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He needs your help, of course.

Farmer John ordered a high speed connection for his farm and is going to share his connectivity with the other farmers. To minimize cost, he wants to lay the minimum amount of optical fiber to connect his farm to all the other farms.

Given a list of how much fiber it takes to connect each pair of farms, you must find the minimum amount of fiber needed to connect them all together. Each farm must connect to some other farm such that a packet can flow from any one farm to any other farm.

The distance between any two farms will not exceed 100,000.

PROGRAM NAME: agrinet

INPUT FORMAT

Line 1: The number of farms, N (3 <= N <= 100).
Line 2..end: The subsequent lines contain the N x N connectivity matrix, where each element shows the distance from on farm to another. Logically, they are N lines of N space-separated integers. Physically, they are limited in length to 80 characters, so some lines continue onto others. Of course, the diagonal will be 0, since the distance from farm i to itself is not interesting for this problem.

SAMPLE INPUT (file agrinet.in)

4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0

OUTPUT FORMAT

The single output contains the integer length that is the sum of the minimum length of fiber required to connect the entire set of farms.

SAMPLE OUTPUT (file agrinet.out)

28

 

      题意:

      给出 N (3 ~ 100),后给出矩阵 N X N,代表 i 到 j 的距离。求最小生成树。

 

      思路:

      Kruskal。刚学并查集的时候写过一遍,重新写了一遍,对比下代码风格。

 

      AC:

/*
TASK:agrinet
LANG:C++
ID:sum-g1
*/

#include <cstdio>
#include <algorithm>
using namespace std;

typedef struct {
    int u, v, l;
}node;

node no[10005];
int root[105];

int cmp(node a, node b) {
        return a.l < b.l;
}

int Find(int x) {
        return x == root[x] ? x : root[x] = Find(root[x]);
}

int main() {
    freopen("agrinet.in", "r", stdin);
    freopen("agrinet.out", "w", stdout);

    int n, sum = 0;

    scanf("%d",&n);

    for (int i = 1; i <= n; ++i)
            root[i] = i;

    for (int i = 1; i <= n; ++i)
            for (int j = 1; j <= n; ++j) {
                    int ans;
                    scanf("%d",&ans);
                    if (ans) {
                            no[sum].u = i;
                            no[sum].v = j;
                            no[sum].l = ans;
                            sum++;
                    }
            }

    sort(no,no + sum,cmp);

    int ans = 0;
    for (int i = 0; i < sum; ++i) {
            int fa = Find(no[i].u);
            int fb = Find(no[i].v);
            if (fa != fb) {
                    ans += no[i].l;
                    root[fa] = fb;
            }
    }

    printf("%d\n", ans);
    return 0;
}

 

 

分享到:
评论

相关推荐

    POJ1258-Agri-Net【Prim】

    【标题】"POJ1258-Agri-Net【Prim】" 是一个编程竞赛题目,来源于北京大学的在线评测系统POJ(Problem Online Judge)。这个题目主要涉及到图论中的一个重要算法——普里姆(Prim)算法。 【描述】"北大POJ1258-...

    pku acm 1258 Agri-Net代码

    pku acm 1258 Agri-Net代码 最小生成树的prim算法,有详细的注释

    1258:Agri-Net(弗洛伊德)

    而在Kruskal算法中,通过排序边的权重并检查并查集避免环路,逐渐构建最小生成树。 总的来说,这段内容涵盖了图论中的最短路径算法(弗洛伊德算法)和最小生成树算法(Prim和Kruskal算法),并提供了这两种算法的...

    Agri-Stick:农业物联网项目

    5. **实时监控与预警系统**:Python的实时数据处理能力可以通过`Flask`或`Django`等Web框架构建用户界面,展示实时数据,并设定阈值以触发警告,提醒农户可能的问题。 6. **云平台集成**:为了存储和处理大量数据,...

    agri-map:一些用于可视化农业植物间距的代码

    在的底部,有一个示例性地块间距图,其中散布了临时和永久(TODO)遮荫树的可可树。 与运行python agri_map.py默认如图所示运行,其结果。 也可以与命令行参数一起运行以修改输出(与-h标志一起运行以查看可用选项)...

    Sen2Agri-ansible:Ansible角色,以简化Sen2Agri服务的安装过程

    Ansible角色,用于简化Sen2Agri服务的安装过程。 这些脚本是为使用Sen2Agri所需的Centos7而量身定制的。 为了运行脚本,您需要下载 Sen2Agri-package-{{sen2agri_version}}。zip srtm.zip Maja_3.2.2_TM.zip 该...

    POJ3414-Pots

    5. **时间复杂度和空间复杂度分析**:为了确保程序能在限制的时间内运行并使用合理的内存,解题报告通常会讨论算法的时间复杂度和空间复杂度,以评估其效率。 6. **错误与调试**:报告可能还会涵盖遇到的问题、调试...

    agribarter-landingpage:Agri-Barter跨平台应用程序的着陆页

    "Agri-Barter"很可能是一个专注于农业交易的平台,而“着陆页”是用户首次接触这个应用的网页,旨在吸引用户并提供基本信息。 **描述分析:** "农业易货项目 巴丹半岛州立大学BS信息技术计划的顶点项目" 描述指出...

    usaco3.1解题报告1

    Prim算法从一个顶点开始,逐步增加边,每次选择当前未加入树中且与树中顶点连接的边中权重最小的一条,直至连接所有顶点。Kruskal算法则是按照边的权重从小到大排序,每次添加一条不形成环的新边,直到所有顶点都在...

    PyPI 官网下载 | agri_tech-0.1.7-py2.py3-none-any.whl

    标题 "PyPI 官网下载 | agri_tech-0.1.7-py2.py3-none-any.whl" 指的是一个在Python Package Index(PyPI)上发布的软件包,名为 "agri_tech",版本为 "0.1.7"。这个软件包的格式是 wheel(whl),这是一种预编译的...

    Python库 | agri_tech-0.1.6-py2.py3-none-any.whl

    《Python库agri_tech-0.1.6-py2.py3-none-any.whl详解》 在Python的生态系统中,库是构建复杂应用程序的重要基石。它们提供了丰富的功能,使得开发者能够快速、高效地实现各种任务。本文将深入探讨一个名为`agri_...

    usaco chap3题解

    - 在实现过程中,需要考虑如何高效地处理边的排序以及如何快速判断两个顶点是否在同一集合中(如使用并查集数据结构)。 #### Score Inflation (inflate) - **知识点**:此题涉及背包问题,属于组合优化中的经典...

    my-agri-market

    my_vue 一个Vue.js项目构建设置# install dependenciesnpm install# serve with hot reload at localhost:8080npm run dev# build for production with minificationnpm run build# build for production and view ...

    PyPI 官网下载 | agri_tech-0.1.6.tar.gz

    《PyPI官网下载 | agri_tech-0.1.6.tar.gz——探索Python农业技术库》 在Python的世界里,PyPI(Python Package Index)是开发者们分享和获取开源软件包的重要平台。"agri_tech-0.1.6.tar.gz"这个资源就是从PyPI...

    FY4圆盘转等经纬工具

    将行列号转换成等经纬度数据,意味着将原本抽象的索引坐标转化为地球上的实际地理坐标,便于用户直观理解数据分布,并与地图软件和其他地理信息系统进行对接。 这个工具不提供开源代码,但作者提供了联系方式,意味...

    小额贷款小鸡与企业家精神:赋予肯尼亚贫困农村家庭以权力

    最近,Nutri-Fresh Farm和Agri-Hub的总监Simon Wachieni确认,到目前为止,所有涉入的家庭都在出售鸡蛋,并作为自身的常规蛋白质来源,他们通过自己孵化小鸡增加了资产,并且他们正在偿还贷款。 我们的最终结论是,...

    bogazici agri merkezi-crx插件

    肌肉和骨骼系统疼痛是由于生成的干扰。姿势障碍引起的痛苦在使用公共交通的人中更为常见。由于这些原因,生活在伊斯坦布尔等大城市的人是一种无毒的治疗方法,可用于肌肉疼痛的溶液。这种治疗中使用的针不是正常注射...

    第3章总结1

    首先,Prim算法是用于求解最小生成树(Minimum Spanning Tree, MST)的一种方法,常用于处理图中的边权重问题,以找到连接所有顶点的最小总权重的树。在"Agri-Net"这道题中,Prim算法的应用帮助解决了构建最短网络的...

Global site tag (gtag.js) - Google Analytics