P1875 佳佳的魔法药水

链接:https://www.luogu.org/problemnew/show/P1875

题目背景

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

题目描述

得到一种药水有两种方法:可以按照魔法书上的指导自己配置,也可以到魔法商店里去 买——那里对于每种药水都有供应,虽然有可能价格很贵。在魔法书上有很多这样的记载:

1 份 A 药水混合 1 份 B 药水就可以得到 1 份 C 药水。(至于为什么 1+1=1,因为……这是魔 法世界)好了,现在你知道了需要得到某种药水,还知道所有可能涉及到的药水的价格以及 魔法书上所有的配置方法,现在要问的就是:1.最少花多少钱可以配制成功这种珍贵的药水;

2.共有多少种不同的花费最少的方案(两种可行的配置方案如果有任何一个步骤不同则视为 不同的)。假定初始时你手中并没有任何可以用的药水。

输入输出格式

输入格式:

第一行有一个整数 N(N<=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: 复制

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

输出样例#1: 复制

10 3

说明

样例说明:

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

题解:记录最小路径方案数,因为不会出现某两行的 A、B 相同但 C 不同的情况,所以最烦的建边问题就解决了,要两个都配方更新,才能拿去更新,后面也不会重复利用

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005, inf = 100000008;
int dis[maxn], cnt[maxn], cp[maxn][maxn], n;
bool vis[maxn];
#define For(a, b, c) for(int a = b; a <= c; a++)
struct Node{int v, w;bool operator < (const Node &a)const {return a.w < w;}
};
void dij(){priority_queue <Node> Q;For(i, 1, n) Q.push((Node) {i, dis[i]});For(i, 0, n)cnt[i] = 1;while(!Q.empty()){int u = Q.top().v;Q.pop();if(vis[u])continue;vis[u] = 1;For(i, 1, n)if(cp[u][i] != -1 && vis[i]){if(dis[cp[u][i]] == dis[u] + dis[i]){cnt[cp[u][i]] += cnt[u] * cnt[i];// printf("%d %d %d %d %d \n",u,i,cp[u][i],dis[cp[u][i]],cnt[cp[u][i]]);
                    Q.push((Node) {cp[u][i], dis[cp[u][i]]});}if(dis[cp[u][i]] > dis[u] + dis[i]){dis[cp[u][i]] = dis[u] + dis[i];cnt[cp[u][i]] = cnt[u] * cnt[i];// printf("%d %d %d %d %d \n",u,i,cp[u][i],dis[cp[u][i]],cnt[cp[u][i]]);
                    Q.push((Node) {cp[u][i], dis[cp[u][i]]});}}}}
int main(){scanf("%d",&n);For(i, 1, n)scanf("%d",&dis[i]);For(i, 1, n)For(j, 1, n)cp[i][j] = -1;int a, b, c;while(scanf("%d%d%d",&a, &b, &c) != EOF){cp[a+1][b+1] = cp[b+1][a+1] = c+1;}//cout<<"LLLL";
    dij();cout<<dis[1]<<" "<<cnt[1];
}

View Code

转载于:https://www.cnblogs.com/EdSheeran/p/9142387.html

洛谷P1875 佳佳的魔法药水相关推荐

  1. 洛谷—— P1875 佳佳的魔法药水

    P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...

  2. 洛谷 P1875 佳佳的魔法药水(最短路) 题解

    题目来源: https://www.luogu.org/problemnew/show/P1875 题目描述: 题目背景 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样 ...

  3. P1875 佳佳的魔法药水

    P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...

  4. 「Vijos 1285」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法药水

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

  5. [NDK 佳佳的魔法药水]

    [题目]:佳佳的魔法药水 [来源]:NDK [关键字]:图论 构图 //================================================================ ...

  6. vijos 1282128312841285 佳佳的魔法照片/魔法药水/魔杖/魔法阵

    题目链接: https://vijos.org/p/1282 https://vijos.org/p/1283 https://vijos.org/p/1284 https://vijos.org/p ...

  7. vijosP1285 佳佳的魔法药水

    vijosP1285 佳佳的魔法药水 链接:https://vijos.org/p/1285 [思路] 图论思想. 很巧妙. 如A+B=C,将AB之间连边,边权为C,用以找相连物品与合成物. 用Dij ...

  8. Vijos - 佳佳的魔法药水(最短路)

    题目链接:https://vijos.org/p/1285 背景 发完了k张照片,佳佳却得到了一个坏消息:他的MM得病了!佳佳和大家一样焦急万分!治好MM的病只有一种办法,那就是传说中的0号药水--怎 ...

  9. 洛谷 P5740 【深基7.例9】最厉害的学生 题解

    Hello!这是我第一次在CSDN社区发题解呢(虽然我只是一个小菜鸡,只会C++,啥也不懂)! 这一次的题解我给大家带来了洛谷 函数与结构体部分的P5740 最厉害的学生这道题. 我们可以先审一审题目 ...

最新文章

  1. 框架-.NET:Spring.Net
  2. 中高德地图只显示某一城市_干货 | 如何快速制作数据地图?让你的可视化逼格再高一级!...
  3. JSON 之 SuperObject(2): 构建方式与 AsJSon
  4. transaction type popup window when create service order
  5. Go vs .NET Core 2.1
  6. mybatis源码阅读(六) ---StatementHandler了解一下
  7. java sleep和wait区别
  8. bash/shell 解析命令行参数工具:getopts/getopt
  9. mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程
  10. Visual Studio 2017入门教程丨如何运行一个Fortran程序
  11. 动态盘/基本盘互转:动态盘怎么转换基本盘?
  12. 【数据结构】【王道】【线性表】单链表的实现及基本操作(带头结点)(可直接运行)
  13. windows7 系统中,IE打开网页窗口提示网页上有错误“无法打开匿名级安全令牌”解决方法
  14. 使用HTML5自制视频控件
  15. GFCTF2021 部分WP
  16. MOOC和网上学习平台整理
  17. houdini之vex 数组
  18. 数据库系统原理与应用教程(037)—— MySQL 的索引(三):删除索引
  19. 半导体器件物理【11】载流子输运现象 —— 散射率Ρ、迁移率μ、电阻率ρ(电导率σ)、砷化镓
  20. 只要不上网,pc机就不会感染计算机病毒,大学计算机题库——判断题.xls

热门文章

  1. 地下水运动方程的解析解(一维潜水)
  2. halcon学习和实践(颜色筛选)
  3. 走进web(关于web、web1.0、web2.0、web3.0)
  4. html5隐藏%3ctextarea,html text隐藏,html textarea
  5. 小科普:什么是屏幕分辨率
  6. UCK Network 为开发者提供全方位孵化,打造区块链爆款应用
  7. 剑指Offer-05:替换空格
  8. BASH比较两位数大小
  9. 测试工程师面试题,你都遇到过哪些呢?
  10. [转]JQuery Mobile 手机显示页面偏小_se7en3_新浪博客