题目链接


Solution

好题. 一开始一直在想怎么蛇皮建图,但是发现一直蛇不出来...

正解是用类似于 dijkstra 的算法对所有点进行松弛.

对于每个元素记录两个值:

  • \(cost\) 代表它的最小花费.
  • \(ans\) 代表它的方案数.
  • 同时用一个\(f_{i,j}\)记录第\(i\)种和第\(j\)种药水可以合成第\(f_{i,j}\)这种药水.

似乎可以发现我们存合并状态的数组很像临接矩阵?

然后就可以开始蛇了...

我们对于每一瓶药水,其 \(cost\) 初值为其直接买的花费.

\(ans\) 初值为 1.

每一次选择未松弛的价格最小的药水\(u\),然后对于所有的 \(f_{u,i}\) 值进行更新.

\(1.\) 如若 \(cost_{f_{u,i}}>cost_u+cost_i\)

那么 \(cost_{f_{u,i}}=cost_u+cost_i\),同时 \(ans_{f_{u,i}}=ans_u*ans_i\)

\(2.\) 如果 \(cost_{f_{u,i}}=cost_u+cost_i\)

那么 \(ans_{f_{u,i}}=ans_{f_{u,i}}+ans_u*ans_i\)

然后最后的答案即为 \(cost[0]\)以及 \(ans[0]\).


Code

#include<bits/stdc++.h>
using namespace std;
const int inf=192608173;
const int maxn=1008;
int f[maxn][maxn],n;
int cost[maxn],ans[maxn]; void dijkstra()
{
int v[1010]={0},k,minimum;
for(int i=1;i<=n;i++)
{
minimum=inf;
for(int j=0;j<n;j++)
if(!v[j]&&cost[j]<minimum)
{k=j;minimum=cost[j];}
//类似于dij的选边进行松弛.
if(minimum==inf) break;
v[k]=1;
for(int j=0;j<n;j++)
if(v[j]&&f[j][k]>-1)
if(cost[f[j][k]]>cost[j]+cost[k])
{
cost[f[j][k]]=cost[j]+cost[k];
ans[f[j][k]]=ans[j]*ans[k];
continue;
}
else if(cost[f[j][k]]==cost[j]+cost[k])
ans[f[j][k]]+=ans[j]*ans[k];
}
} int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&cost[i]);
int a,b,c;
memset(f,-1,sizeof(f));
while(cin>>a>>b>>c)
{f[a][b]=c;f[b][a]=c;}//此处建边.
for(int i=0;i<n;i++)
ans[i]=1;
dijkstra();
cout<<cost[0]<<" "<<ans[0];
return 0;
}

P1875 佳佳的魔法药水 (最短路,DP)的更多相关文章

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

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

  2. P1875 佳佳的魔法药水

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

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

    https://www.luogu.org/problemnew/show/1875 题目背景 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的 ...

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

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

  5. vijosP1285 佳佳的魔法药水

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

  6. vijos:P1285佳佳的魔法药水

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

  7. 「Vijos 1283」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔杖

    佳佳的魔杖 背景 配制成功了珍贵的0号药水,MM的病治好了.轻松下来的佳佳意外的得到了一个好东西--那就是--一种非常珍贵的树枝.这些树枝可以用来做优质的魔杖!当然了,不能只做自己的,至少还要考虑到M ...

  8. TYVJ P3407 佳佳的魔法照片 Label:语文很重要 语文很重要 语文很重要

    描述 佳佳的魔法照片(mphoto.pas\c\cpp) [题目背景] 佳佳的魔法照片(Magic Photo):如果你看过<哈利•波特>,你就会知道魔法世界里的照片是很神奇的.也许是因为 ...

  9. hdu 4568 Hunter 最短路+dp

    Hunter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

随机推荐

  1. cv2.minAreaRect() 生成最小外接矩形

    简介   使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数.   cv2 ...

  2. 使用FontDialog组件设置字体

    实现效果: 知识运用: FontDialog组件的Font属性 //获取或设置选定的字体 public Font Font  { get;set; } 实现代码: private void butto ...

  3. 查看numpy的类型

    查看一个变量的类型:type(img) 查看array中的数据值的类型:img.dtype 查看array的形状:img.shape

  4. FTPClient:enterLocalPassiveMode()方法简单说明

    问题:在Java程序中,使用FTPClient下载FTP文件的时候,可以下载到FTP服务器上的文件夹,但是里面的文件没有下载到本地. 分析:这个涉及到FTP在使用的过程中,客户端和服务端连接过程中,端 ...

  5. 01_5_SERVLET为什么有2个init方法

    01_5_SERVLET为什么有2个init方法 1. 在web.xml配置初始化参数 <servlet> <servlet-name>TestInitServlet</ ...

  6. 解决 cocos2dx iOS/mac 设置纹理寻址模式后纹理变黑的问题

    sprite:getTexture():setTexParameters(gl.LINEAR,gl.LINEAR,gl.REPEAT,gl.REPEAT) 在安卓设备上,设置了纹理自定义寻址模式,纹理 ...

  7. SVN:The working copy is locked due to a previous error (一)

    使用 Cornerstone  时,碰到如题问题,SVN无法Update.Commit等操作. 解决办法:Working Copies ⟹ '右键' ⟹ Clean 即可解决! 尊重作者劳动成果,转载 ...

  8. 201621123080《java程序设计》第14周实验总结

    201621123080<java程序设计>第14周实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2. ...

  9. POJ:1753-Flip Game(二进制+bfs)

    题目链接:http://poj.org/problem?id=1753 Flip Game Time Limit: 1000MS Memory Limit: 65536K Description Fl ...

  10. 笔记-python-centos环境下安装配置

    笔记-python-centos环境下安装配置 1.      准备工作 环境准备 centos6.5 mini,已有python 2.6.6 下载源码包 Python官网下载Gzipped sour ...