★   输入文件:piggyback.in   输出文件:piggyback.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】

Bessie和她妹妹Elsie白天都在牧场的不同区域吃草,晚上再回到谷仓休息。天生聪明的她们,想出了一个最节省体力的办法。

Bessie从一个区域走到相邻区域需要花费B单位的体力,Elsie走到相邻区域需要花费E单位的体力,但是,如果如果她俩都在同一个区域的话,Bessie可以把Elsie背在背上一起走到相邻的区域,只需要花费P单位的体力,这会比她俩分别从这个区域单独走到该区域要节省体力。如果P非常小的话,最高效的方式就是俩人先走到一个地方集合,然后一个驮着另一个回到谷仓;当然了,如果P太大,自然还是两人分头行动比较合算。不过话说回来,她们俩其实并不喜欢这种毫无风度的背驮式行走,这会让她们尊严扫地。

给出B,E和P,以及牧场的布局,请计算Bessie和Elsie回到谷仓所需的最小体力和。

【输入格式】

第一行有5个正整数:B,E,P,N和M,均不超过40000,其中B,E和P所表示的含义如上所述,N表示牧场中区域的个数,编号依次为1~N(N>=3),M表示区域之间边的个数,Bessie和Elsie最初分别待在1号和2号区域,谷仓位于N号区域;

接下来有M行,每行有两个空格隔开的整数,表示某两个

【输出格式】

输出只有一个整数,表示Bessie和Elsie最终回到谷仓一共需要花费的体力的最小值。

【样例输入】

4 4 5 8 8
1 4
2 3
3 4
4 7
2 5
5 6
6 8
7 8

【样例输出】

22

【提示】

样例解释:

Bessie先从1号区域来到4号区域,Elsie则先从2号区域经由3号区域也来到4号区域,然后采用背驮式从4号区域经由7号区域到达8号区域,即谷仓。

【来源】

在此键入。

bfs

枚举中间点取最小值

屠龙宝刀点击就送

#include <cstring>
#include <cstdio>
#include <queue>
#define N 40005
using namespace std;
bool vis[N];
int B,E,P,n,m,cnt,dep[N][],to[N<<],head[N],nextt[N<<];
inline int min(int a,int b) {return a>b?b:a;}
void bfs(int s,int type)
{
memset(vis,,sizeof(vis));
vis[s]=;
dep[s][type]=;
queue<int>q;
q.push(s);
for(int u;!q.empty();)
{
u=q.front();
q.pop();
for(int i=head[u];i;i=nextt[i])
{
int v=to[i];
if(!vis[v])
{
dep[v][type]=dep[u][type]+;
vis[v]=;
q.push(v);
}
}
}
}
int main(int argc,char *argv[])
{
freopen("piggyback.in","r",stdin);
freopen("piggyback.out","w",stdout);
scanf("%d%d%d%d%d",&B,&E,&P,&n,&m);
for(int u,v;m--;)
{
scanf("%d%d",&u,&v);
nextt[++cnt]=head[u];to[cnt]=v;head[u]=cnt;
nextt[++cnt]=head[v];to[cnt]=u;head[v]=cnt;
}
bfs(,);
bfs(,);
bfs(n,);
int ans=0x7fffffff;
for(int i=;i<=n;++i) ans=min(ans,dep[i][]*B+dep[i][]*E+dep[i][]*P);
printf("%d\n",ans);
return ;
}

最新文章

  1. STM32CubeMX安装指南
  2. web 安全的前期准备哦
  3. IPsec 学习笔记
  4. networkx的绘图中文显示方块问题
  5. thymleaf分支用法
  6. javaweb学习总结(四十七)——监听器(Listener)在开发中的应用
  7. MD5 概念与用途
  8. 转 delphi SelText,GetText,SetText用法
  9. vue--指令中值得随笔的地方
  10. CDH集群搭建部署
  11. iOS使用带字体图标的UIButton(支持各种方向)
  12. STL中坑爹的max函数
  13. Python学习笔记015——汉字编码
  14. par函数bty参数-控制绘图边框
  15. ES6的新特性(3)——变量的解构赋值
  16. BAT解密:互联网技术发展之路(5)- 开发层技术剖析
  17. java 多线程 3 synchronized 同步
  18. linux如何查看端口是否被占用?
  19. 1 App Components - App组件
  20. 在.jsp中非表单请求action的几种方式总结

热门文章

  1. 新安装的 ubuntu 下 make menuconfig 报错
  2. Ubuntu 与 Windows 共享文件夹
  3. Spring 属性配置
  4. git 修改远程仓库源
  5. 求组合数 C(n,m)
  6. 【转载】Hyperledger学习小结
  7. Spring MVC 参数的绑定方法
  8. Nginx停止服务和各种命令
  9. css3中的变形(transform)、过渡(transtion)、动画(animation)
  10. 基于CentOS系统下的Oracle的安装