新的开始( [USACO08OCT]打井Watering Hole)

2023-05-16

新的开始
(newstart.pas/c/cpp)
【 题目描述】
话说小 FF 在经历了上次“寻找古代王族遗产” 的探险后, 成为了世界上最伟大的探险
家并拥有了一大笔财富。 当然他不能坐吃山空, 必须创造财富!! 于是他买下了传说中的
GreedIsland 并优先发展那里的采矿业„„他还将其称为 GreedIsland 的“ NewBe_One” 计划。
发展采矿业当然首先得有矿井, 小 FF 花了上次探险获得的千分之一的财富请人在岛上
挖了 N 口矿井, 但他似乎忘记考虑的矿井供电问题„„
为了保证电力的供应, 小 FF 想到了两种办法:
1、 在这一口矿井上建立一个发电站, 费用为 v( 发电站的输出功率可以供给任意多个
矿井)。
2、 将第 i 口矿井与已经有电力供应的第 j 口矿井之间建立电网的费用为 p[i,j]。
小 FF 希望身为”NewBe_One”计划首席工程师的你帮他想出一个保证所有矿井电力供应的最
小花费。
【 输入格式】
第一行一个整数 N,表示矿井总数。
第 2~N+1 行, 每行一个整数, 第 i 个数 v[i]表示在第 i 口矿井上建立发电站的费用。 接
下来为一个 N×N 的矩阵 P, 其中 p[i,j]表示在第 i 口矿井和第 j 口矿井之间建立电网的费用
( 数据保证有 p[i,j]=p[j,i],且 p[i,i]=0)。
【 输出格式】
输出共一行一个整数, 表示让所有矿井获得充足电能的最小花费。
【 输入样例】
4 5 4 4 3 0
2 2 2
2 0 3 3
2 3 0 4
2 3 4 0
【 输出样例】
9
【 输出样例说明】
小 FF 可以选择在 4 号矿井建立发电站然后把所有矿井都与其建立电网, 总花费是
3+2+2+2=9。
【 数据规模】
对于 30%的数据: 1≤N≤50;
对于 100%的数据: 1≤N≤300; 1≤v[i],p[i,j]≤10^5;

这题看着没有任何头绪,但其实只是最小生成树。

这题看着没有任何头绪,但其实只是最小生成树。

这题看着没有任何头绪,但其实只是最小生成树。
先看张图!
这里写图片描述
我们可以这么想,岛上有一座另外的发电站p。
在x这个矿井造一个发电站,消耗w[i],就相当于x点到p点的消耗经费为w[i]
于是就可以构筑出上面那张图,上图求所有点相连的最小值不就是最小生成树吗?

code:

#include<bits/stdc++.h>
using namespace std;
int i,j,k,n,m,tot,ans,fa[305],w[305],f[305][305],top,re;
int read(){
    char c;while(c=getchar(),(c<'0'||c>'9')&&c!='-');
    int x=0,y=1;if(c=='-') y*=-1;else x=c-'0';
    while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0'; 
    return x*y;
}
int find(int x){
    if(fa[x]!=x) fa[x]=find(fa[x]);
    return fa[x];
}
void unionn(int x,int y){
    x=find(x);y=find(y);
    if(x>y) fa[x]=y;
    else fa[y]=x;
}
struct node{
    int a,b,len;
}a[100005];
int cmp(node a,node b){
    if(a.len<b.len) return 1;
    else return 0;
}
int main()
{
    n=read();re=0;
    for(int i=1;i<=n;i++) w[i]=read();
    for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++){
        f[i][j]=f[j][i]=read();
        if(j>=i+1) a[++top].a=i,a[top].b=j,a[top].len=f[i][j];
     }
    for(int i=1;i<=n+1;i++) fa[i]=i;
    for(int i=1;i<=n;i++) a[++top].a=i,a[top].b=n+1,a[top].len=w[i]; 
    sort(a+1,a+1+top,cmp);
    for(int i=1;i<=top;i++){
        if(find(a[i].a)!=find(a[i].b)){
            k++;unionn(a[i].a,a[i].b);
            ans+=a[i].len;
        }
        if(k==n) break;
    }
    cout<<ans;
    return 0;
}

转载于:https://www.cnblogs.com/stevensonson/p/7612200.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新的开始( [USACO08OCT]打井Watering Hole) 的相关文章

  • 图的基本存储的基本方式三

    图的基本存储的基本方式三 Problem Description 解决图论问题 xff0c 首先就要思考用什么样的方式存储图 但是小鑫却怎么也弄不明白如何存图才能有利于解决问题 你能帮他解决这个问题么 xff1f Input 多组输入 xf
  • 数据结构实验之栈与队列九:行编辑器

    数据结构实验之栈与队列九 xff1a 行编辑器 Problem Description 一个简单的行编辑程序的功能是 xff1a 接受用户从终端输入的程序或数据 xff0c 并存入用户的数据区 由于用户在终端上进行输入时 xff0c 不能保
  • 顺序表应用2:多余元素删除之建表算法

    顺序表应用2 xff1a 多余元素删除之建表算法 Time Limit 3 ms Memory Limit 600 KiB Submit Statistic Problem Description 一个长度不超过10000数据的顺序表 xf
  • 数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四 xff1a 有序链表的归并 Problem Description 分别输入两个有序的整数序列 xff08 分别包含M和N个数据 xff09 xff0c 建立两个有序的单链表 xff0c 将这两个有序单链表合并成为一个
  • 数据结构实验之链表五:单链表的拆分

    数据结构实验之链表五 xff1a 单链表的拆分 Problem Description 输入N个整数顺序建立一个单链表 xff0c 将该单链表拆分成两个子链表 xff0c 第一个子链表存放了所有的偶数 xff0c 第二个子链表存放了所有的奇
  • 数据结构——二叉树的基本操作(不包括还原)

    小编没有写主函数 xff0c 你们需要用什么函数只需要自己写一个主函数调用一下就可以了 include lt stdio h gt include lt string h gt include lt stdlib h gt typedef
  • 数据结构实验之图论四:迷宫探索

    数据结构实验之图论四 xff1a 迷宫探索 Time Limit 1000 ms Memory Limit 65536 KiB Problem Description 有一个地下迷宫 xff0c 它的通道都是直的 xff0c 而通道所有交叉
  • 数据结构实验之图论七:驴友计划

    数据结构实验之图论七 xff1a 驴友计划 Time Limit 1000MS Memory Limit 65536KB Problem Description 做为一个资深驴友 xff0c 小新有一张珍藏的自驾游线路图 xff0c 图上详
  • 数据结构实验之排序一:一趟快排

    H 数据结构实验之排序一 xff1a 一趟快排 Problem Description 给定N个长整型范围内的整数 xff0c 要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果 Input 连续输入多组数据 xff0c 每组输入
  • 数据结构实验之排序二:交换排序

    include lt stdio h gt int s x void qsort int a int l int h int i 61 l j 61 h k 61 a l while i gt 61 j return while i lt
  • vs当前不会命中断点,还未为文档加载符号

    一般网上的解决办法是 xff1a A 工具 选项 调试 常规中的 要求源文件和原始版本完全匹配 的勾去掉 B 工具 选项 调试 常规中的 启用仅我的代码 的勾去掉 这种是治标不治本 xff0c 有的时候也不起作用 当前不会命中断点 xff0
  • 数据结构实验之排序三:bucket sort

    数据结构实验之排序三 xff1a bucket sort 作为桶排序的典型例题 xff0c 我们完全可以按照桶排序的思想来做这个题 但是本题完全不需要用太多的空间去换时间 xff0c 只需要一个空间为101的一维数组就好 Problem D
  • 数据结构实训——停车场系统

    这个程序是利用栈和循环队列实现的 xff0c 自己得先处理好逻辑关系就好了 由于题目没有要求 xff0c 这个程序就没加重复判断 xff0c 比如一辆车已经停在车位上或者便道上 xff0c 再来一辆就判断不了了 关于栈 xff0c 就是先进

随机推荐

  • 关于在linux下监测内存泄漏的问题

    小伙伴们 xff0c 会不会时常注意自己的程序会不会有内存泄漏的问题 xff1f 分享一个工具 1 安装valgrind 1 xff09 将安装包valgrind 3 8 1 9 el6 i686 rpm拷贝到虚拟中 2 xff09 yum
  • 计算机组成原理第二章测试题

    1 在定点机中执行算术运算时会产生溢出 xff0c 其原因是 C A 运算过程中最高位产生了进位或借位 B 参与运算的操作数超出了机器的表示范围 C 运算结果的操作数超出了机器的表示范围 D 寄存器的位数太少 2 某机器字长32位 xff0
  • MySQL操作语言汇总

    创建表数据 create table 表名 字段名 数据类型 约束条件 xff0c xff1b xff08 其中约束条件可选 xff09 注意 xff1a 1 必须给定表名 xff0c 且不能使用SQL语言中的关键字 2 必须给字段命名 x
  • 数据库第三次实验

    lt 实验要求 gt 每次实验前学生必须根据实验内容认真准备 在指导教师的帮助下能够完成实验内容 实验结束后总结实验内容 书写实验报告 遵守实验室规章制度 不缺席 实验学时内必须做数据库的有关内容 xff0c 不允许上网聊天或玩游戏 lt
  • 数据库第二次实验

    lt 实验要求 gt 每次实验前学生必须根据实验内容认真准备 在指导教师的帮助下能够完成实验内容 实验结束后总结实验内容 书写实验报告 遵守实验室规章制度 不缺席 实验学时内必须做数据库的有关内容 xff0c 不允许上网聊天或玩游戏 lt
  • 数据库第一次实验

    实验题目 xff1a 认识 DBMS xff08 Oracle xff09 xff0c SQL 数据定义功能实验目的 xff1a 理解数据库模式的概念 xff0c 通过使用 Oracle 的客户端 Oracle OraClient10g h
  • orcl的Windows下的配置

    理解数据库模式的概念 xff0c 通过使用 Oracle 的客户端 Oracle OraClient10g home1 Enterprise Manager Console 建立基本表 xff0c 实现模式对象与用户名之间的关联 熟悉 En
  • 数据库在线测试

  • WSL修改默认安装目录到其他盘eg d:

    1 查看WSL分发版本 在Windows PowerShell中输入如下命令 wsl l all v NAME STATE VERSION Ubuntu 18 04 Running 2 docker desktop Running 2 do
  • iOS 简单的贝塞尔(UIBezierPath)曲线使用

    在iOS中绘制矢量图或者路径的时候通常会用到 UIBezierPath xff0c 它在 UIKit 中 xff0c 是CoreGraphics对path的封装 使用 UIBezierPath xff0c 可以绘制直线 椭圆 多边形和贝塞尔
  • OpenStack计费服务Cloudkitty分析 计费核心(二)

    计费模型是实现计费的核心 xff0c 一般能允许用户根据实际需求设定计费规则并且根据收集到资源数据进行准确的费用计算 Cloudkitty实现了多种计费模型noop xff0c hashmap和pyscripts xff0c 允许同时启动多
  • 跳表的动态演示

    跳表的动态演示 插入操作 删除操作 xff1a 查询操作 xff1a
  • [模拟/模拟/有技巧的搜索] csp第一次模拟

    目录 题目一 咕咕东的奇遇题意样例思路总结代码 题目二 咕咕东想吃饭题意样例思路总结代码 题目三 可怕的宇宙射线题意样例思路总结代码 题目一 咕咕东的奇遇 题意 有一个如图所示的圆环 xff0c 初始时指针指在a处 给定一个字符串 xff0
  • [单调栈/差分/尺取/单调队列]Exercise Week5 A最大矩形+B魔法猫+C平衡字符串+D滑动窗口

    目录 A 单调栈 最大矩形题意样例思路总结代码 B 差分 TT 39 s Magic Cat题意样例思路总结代码 C 尺取 平衡字符串题意样例思路总结代码 D 单调队列 滑动窗口题意样例思路总结代码 A 单调栈 最大矩形 题意 给一个直方图
  • [树的直径/并查集/最小生成树/最小瓶颈生成树]Exercise Week6 A+B+C+D

    目录 A 树的直径 氪金带东题意样例思路总结代码 B 并查集 戴好口罩 xff01 题意样例思路总结代码 C 最小生成树 掌握魔法 东东题意样例思路总结代码 D 最小瓶颈生成树 数据中心题意样例思路总结代码 A 树的直径 氪金带东 题意 实
  • [差分约束/拓扑排序/kosaraju缩点]Exercise Week8 A+B+C

    目录 A 差分约束 区间选点 题意样例样例输入 xff1a 样例输出 思路总结代码 B 拓扑排序 猫猫向前冲题意样例样例输入 xff1a 样例输出 xff1a 思路总结代码 C SCC缩点 区间选点 题意样例样例输入 xff1a 样例输出
  • [大模拟]Test Week8 二阶魔方

    目录 大模拟 东东玩二阶魔方题意d样例样例输入 xff1a 样例输出 思路总结代码 B 模拟 ST串题意样例样例输入 xff1a 样例输出 xff1a 思路总结代码 大模拟 东东玩二阶魔方 题意d 东东有一个二阶魔方 xff0c 即2 2
  • [大模拟]Test Week14 猫睡觉问题

    目录 大模拟 猫睡觉问题题意样例样例输入 xff1a 样例输出 思路总结代码 大模拟 猫睡觉问题 题意 众所周知 xff0c TT家里有一只魔法喵 这只喵十分嗜睡 一睡就没有白天黑夜 喵喵一天可以睡多次 xff01 xff01 每次想睡多久
  • [区间DP/状压DP]Exercise Week12 A~E

    目录 A 水 找数题意样例样例输入 xff1a 样例输出 思路总结代码 B BFS 逃离题意样例样例输入 xff1a 样例输出 xff1a 思路总结代码 C DP 扫楼题意样例样例输入 xff1a 样例输出 思路总结代码 D 区间DP 最长
  • 新的开始( [USACO08OCT]打井Watering Hole)

    新的开始 newstart pas c cpp 题目描述 话说小 FF 在经历了上次 寻找古代王族遗产 的探险后 xff0c 成为了世界上最伟大的探险 家并拥有了一大笔财富 当然他不能坐吃山空 xff0c 必须创造财富 xff01 xff0