佳佳的魔法药水

背景

发完了k张照片,佳佳却得到了一个坏消息:他的MM得病了!佳佳和大家一样焦急万分!治好MM的病只有一种办法,那就是传说中的0号药水……怎么样才能得到0号药水呢?你要知道佳佳的家境也不是很好,成本得足够低才行……

描述

得到一种药水有两种方法:可以按照魔法书上的指导自己配置,也可以到魔法商店里去买——那里对于每种药水都有供应,虽然有可能价格很贵。在魔法书上有很多这样的记载:1份A药水混合1份B药水就可以得到1份C药水。(至于为什么1+1=1,因为……这是魔法世界)好了,现在你知道了需要得到某种药水,还知道所有可能涉及到的药水的价格以及魔法书上所有的配置方法,现在要问的就是:1.最少花多少钱可以配制成功这种珍贵的药水;2.共有多少种不同的花费最少的方案(两种可行的配置方案如果有任何一个步骤不同则视为不同的)。假定初始时你手中并没有任何可以用的药水。

输入格式

第一行有一个整数\(N(N \le 1000)\),表示一共涉及到的药水总数。药水从0~N-1顺序编号,0号药水就是最终要配制的药水。

第二行有N个整数,分别表示从0~N-1顺序编号的所有药水在魔法商店的价格(都表示1份的价格)。

第三行开始,每行有3个整数A、B、C,表示1份A药水混合1份B药水就可以得到1份C药水。注意,某两种特定的药水搭配如果能配成新药水的话,那么结果是唯一的。也就是说不会出现某两行的A、B相同但C不同的情况。

输出格式

输出两个用空格隔开的整数,分别表示得到0号药水的最小花费以及花费最少的方案的个数。

样例1

样例输入1

7
10 5 6 3 2 2 3
1 2 0
4 5 1
3 6 2

样例输出1

10 3

限制

1秒

提示

最优方案有3种,分别是:直接买0号药水;买4号药水、5号药水配制成1号药水,直接买2号药水,然后配制成0号药水;买4号药水、5号药水配制成1号药水,买3号药水、6号药水配制成2,然后配制成0。


思路

这道题,我扪可以使用类似于最短路的方法做。

与最短路类似,我们引入蓝点、白点的概念,即确定一些药品的最佳购买方案,并用它们来优化其他药品的方案。

很明显,目前购买价格(或制取价格)最低的是不可能再优化的,因此把它的价格确定,优化它能优化的所有方案。

然后继续以这种方式确定药水的最小购买(制取)价格,最后得到的就是每个药品的最低价。

由于数据范围较小,这里不必用堆优化,直接暴力就可以了。如果实在要卡你,就使用一个堆优化就好了。

至于方案数,可以再用一个数组记录,与最短路计数差不多,只要注意运用加法原理与乘法原理,这里不再赘述。

还有注意开long long(似乎不开也可以过,保险起见还是开起来吧)。

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1005
#define INF 1000000000000000000
#define LL long long
typedef pair<int, int> pi;struct ppp{int x, y, z;
};ppp make( LL x, LL y, LL z ){ppp t; t.x = x; t.y = y; t.z = z;return t;
}int N;
int m[MAXN][MAXN];
bool vis[MAXN];
LL dis[MAXN], s[MAXN];void Dij(){for ( int i = 0; i < N; ++i ){int t(-1);for ( int j = 0; j < N; ++j ) if ( !vis[j] && ( t == -1 || dis[t] > dis[j] ) ) t = j;if ( t == -1 ) return;vis[t] = 1;for ( int j = 0; j < N; ++j )if ( m[t][j] < N && vis[t] && vis[j] ){if ( dis[m[t][j]] > dis[t] + dis[j] ){dis[m[t][j]] = dis[t] + dis[j]; s[m[t][j]] = s[t] * s[j];}else if ( dis[m[t][j]] == dis[t] + dis[j] ) s[m[t][j]] += s[t] * s[j];}}
}int main(){scanf( "%d", &N );for ( int i = 0; i < N; ++i ) scanf( "%lld", &dis[i] ), s[i] = 1;int x, y, z;memset( m, 0x3f, sizeof m );while( ~scanf( "%d%d%d", &x, &y, &z ) ) m[x][y] = m[y][x] = z;Dij();printf( "%lld %lld\n", dis[0], s[0] );return 0;
}

转载于:https://www.cnblogs.com/louhancheng/p/10055532.html

「Vijos 1285」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法药水相关推荐

  1. 蓝桥杯2021 第二期模拟赛

    目录: 1.二进制数 2.整倍数 3.要求序列 4.无向图的结点 5.字母距离 6.时间调整 7.平行四边形 好久不见xdm,今天写什么呢?今天被蓝桥杯模拟赛打了一顿,说难也不难 一起来看吧 1.二进 ...

  2. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  3. 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  4. 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  5. 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  6. 第十四届蓝桥杯第二期模拟赛 【python】

    第十四届蓝桥杯第二期模拟赛 [python] 文章目录 第十四届蓝桥杯第二期模拟赛 [python] ✨最小的2022 (python二进制) ❓️问题描述 答案提交

  7. 蓝桥杯|2021第十二届蓝桥杯第二次模拟赛真题与解答[Java]

    记录2021年第十二届蓝桥杯第二次模拟赛真题与解题,部分答案来自网络.个人记录,菜得很. 目录 填空题 一 二 三 四 五 编程题 六 七 八 九 十 填空题 一 问题描述 请问在 1 到 2020 ...

  8. [蓝桥杯第十一届校内模拟赛] Apare_xzc

    华中师范大学蓝桥杯第十一届校内模拟赛 2020/3/22 8:00-12:00 题目还是比省赛要简单的,我9:25就做完了. 第一题 分析: 简单题,求给定的1200000的正约数的个数.我们可以暴力 ...

  9. 【蓝桥杯】第十三届蓝桥杯单片机第二次省赛 代码程序

    第十三届蓝桥杯单片机第二次省赛 题目 hex文件 代码 工程文件 B站视频 更多资料 题目 历届的省赛和国赛的题目我已经在前面的文章(点击查看)里给大家分享了(网盘资源),需要的话,直接去下载,我在这 ...

最新文章

  1. python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟
  2. Flink1.7.2 sql 批处理示例
  3. linux修改权限后不能开机,打造完美Linux系统:疑难杂症的解决(转)
  4. 2018-12 jdk_JDK 12新闻(2018年9月13日)
  5. hadoop学习——Hadoop核心组件
  6. 饿了么java_eleme-openapi-java-sdk
  7. python 完全背包问题_动态规划——背包问题python实现(01背包、完全背包、多重背包)...
  8. 页面中超长字段只显示部分
  9. 计算一条3d空间直线和一个3d空间平面的交点
  10. 主流的Web应用程序平台
  11. [技术讨论]关于前几天发布的京东bug上的问题分析
  12. php获取当前进程的id
  13. hmc830相位噪声_支持紧凑型LO解决方案,还是靠“PLL VCO”最佳拍档
  14. 大数据平台的SQL查询引擎有哪些
  15. 巧用快捷键轻松设置Eexel单元格格式(转)
  16. php控制windows系统关机,window_winXP系统设置一键关机的两种方法,windows系统关机需要三步,对我 - phpStudy...
  17. 移动支付时代的手机和app安全设置
  18. HackTheBox - Brainfuck Write Up
  19. 将DAT格式视频文件转换成ASF和WMV格式视频文件
  20. 大数据技术原理——期末复习storm

热门文章

  1. IE浏览器各版本的CSS Hack
  2. Exchange 服务器可支持性矩阵
  3. 在centos 下安装和使用MySQL
  4. div+css中常见的问题
  5. Eclipse最新插件的下载地址大全[收集整理] zt
  6. 工程日志(110316)-机房内电子信息设备电量估算
  7. 推荐WCF的一系列录像
  8. 浅析权限认证中的有状态和无状态
  9. Zookeeper——一致性协议:Zab协议
  10. spring-jar包详解整理