Piggy Back
(piggyback.pas/c/cpp)
【问题描述】
Bessie 和她的姐姐 Elsie 在不同的田块吃草,晚上她们都返回牛棚休息。作为聪明的奶牛,她们想设计一个方案使得步行消耗的能量最少。牛,她们想设计一个方案使得步行消耗的能量最少。Bessie 从一个田块到相邻的田块要耗费 B 个单位的能量, Elsie 从一个田块到相邻的田块要耗费要耗费 E 个单位的能量。然而当 Bessie 和 Elsie 处于同一个田块时, Bessie 用背驮着 Elsie 一起走,从一个田块到相邻的田块要耗费起走,从一个田块到相邻的田块要耗费 P 个单位的能量。如果 P 小于 B+E,则被认为是比较适用的;如果适用的;如果 P 非常小,那么最佳的方案就是尽快使得 Bessie 和 Elsie 在某一田块相遇;当然如果然如果 P 非常大, 那么则尽可能使得 Bessie 和 Elsie 分开走。另一方面,她们对“背驮式”很不高兴,她们不明白为什么这种猪用来驮运的方式会被认为是优秀的方法。给出很不高兴,她们不明白为什么这种猪用来驮运的方式会被认为是优秀的方法。给出 B,E 和 P,帮助她们姐俩找出从牧场到牛棚的花费能量最小的方案。
【输入格式】
第一行包含 5 个正整数 B,E,P,N 和 M。 N 是牧场中田块的数量(分别编号为 1..N),M 表示田块之间通路条数
田块之间通路条数.Bessie 和 Elsie 一开始分别位于 1 和 2,牛棚位于 N.接下来 M 行,每行一对整数 U 和 V,分别表示两个田块之间有通路。通路连接是双向的,可以从的,可以从 1 到 N,和从 2 到 N,并且沿途有一系列通路。
【输出格式】
输出共一行一个整数,表示从牧场到牛棚的花费能量最小的方案。
【输入样例】
【输出格式】
输出共一行一个整数,表示从牧场到牛棚的花费能量最小的方案。
【输入样例】
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.
【数据规模】
对于 40%的数据: 3≤N,M≤6,000;
对于 100%的数据: 3≤B,E,P,N,M≤40,000; 1≤U, V≤N;且 U≠V;

第一次见到这题时,都会有一种错觉,认为它需要求出1和2点的最短路径,贪心求最优值,其实不必也不需要这么麻烦,仔细看题目,其实可以发现,背驮式其实是一个关键。我们需要知道Bessie 和 Elsie在哪汇聚,所以我们枚举汇聚点,那问题又来了,如何求汇聚于枚举的点的最短路径呢?SPFA就好了。
code
#include <cstdio>
#include <cctype>
#include <vector>
#include <cstring>
#include <algorithm>
#define C c = tc ( )
using namespace std;inline char tc(){static char fl[100000],*A,*B;return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}inline void read(int &x){static char c;while(!isdigit(C));x=c-'0';while(isdigit(C))x=x*10+c-'0';
}struct node{int y,c;};
int B,E,P,n,m,p[40001][3],l[100001],h,t,vis[40001],dist[40001][4],ans=2e9;
vector <node> a[40001];void spfa1(){h=t=0;memset(vis,0,sizeof(vis));l[++t]=1;dist[1][1]=0;while(h<t){int front=l[++h];vis[front]=0;for(int i=0;i<a[front].size();i++){int to=a[front][i].y;if(dist[front][1]+B<dist[to][1]){dist[to][1]=dist[front][1]+B;if(!vis[to])vis[to]=1,l[++t]=to;}}}
}void spfa2(){h=t=0;memset(vis,0,sizeof(vis));l[++t]=2;dist[2][2]=0;while(h<t){int front=l[++h];vis[front]=0;for(int i=0;i<a[front].size();i++){int to=a[front][i].y;if(dist[front][2]+E<dist[to][2]){dist[to][2]=dist[front][2]+E;if(!vis[to])vis[to]=1,l[++t]=to;}}}
}void spfa3(){h=t=0;memset(vis,0,sizeof(vis));l[++t]=n;dist[n][3]=0;while(h<t){int front=l[++h];vis[front]=0;for(int i=0;i<a[front].size();i++){int to=a[front][i].y;if(dist[front][3]+P<dist[to][3]){dist[to][3]=dist[front][3]+P;if(!vis[to])vis[to]=1,l[++t]=to;}}}
}int main(){freopen("piggyback.in","r",stdin);freopen("piggyback.out","w",stdout);read(B),read(E),read(P),read(n),read(m);for(int i=1;i<=m;i++){read(p[i][1]),read(p[i][2]);a[p[i][1]].push_back((node){p[i][2],0});a[p[i][2]].push_back((node){p[i][1],0});}memset(dist,63,sizeof(dist));spfa1();spfa2();spfa3();for(int i=1;i<=n;i++){ans=min(ans,dist[i][1]+dist[i][2]+dist[i][3]);}printf("%d",ans);fclose(stdin),fclose(stdout);return 0;
}

Piggy Back_KEY相关推荐

  1. Taran 缩点【bzoj1529】[POI2005]ska Piggy banks

    [bzoj1529][POI2005]ska Piggy banks Description Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个 ...

  2. BZOJ 1529: [POI2005]ska Piggy banks( 并查集 )

    每一连通块砸开一个就可以拿到所有的钱, 所以用并查集求连通块数 ------------------------------------------------------------------- ...

  3. Error: file not found: arch/arm/boot/compressed/piggy.lzo

    问题:在编译Android 系统kernel源码的时候出现错误 I am trying to build android projectGetting below error even after s ...

  4. 内核编译出错 [arch/arm/boot/compressed/piggy.lzo] Error 1

    项目场景: linux4.x 内核编译出现错误 问题现象: 编译打印输出 arch/arm/boot/compressed/Makefile:180: recipe for target 'arch/ ...

  5. 内核里的猪头 -- piggy.o

    记得大学的时候室友对我的昵称是猪头,其实我还挺瘦的,我想他们是嫉妒我帅.^_^ 现在想想当时真是一段美好的时光,可能是我生命中最美好的一段了吧.而一晃也都是十年多前了. piggy.o的生成 1 cm ...

  6. BZOJ 3891 USACO 2014 Dec Piggy Back 搜索 最短路

    第一个人从1出发边权A,第二个人从2出发边权B,走到一起边权C,求最短方案使两人走到n. 分别从1,2,n跑一次最短路,然后枚举走到一起的点计算答案即可. 没开快速读入 104ms,开快速读入84ms ...

  7. bzoj1529: [POI2005]ska Piggy banks

    Description Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个存钱罐的钥匙放到了某些存钱罐里. Byteazar 现在想买一台汽车于 ...

  8. BZOJ_P1529 [POI2005]ska Piggy banks(并查集)

    BZOJ传送门 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1062 Solved: 494 [Submit][Status][Discuss] Des ...

  9. BZOJ1529ska Piggy banks

    1529: [POI2005]ska Piggy banks Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1065 Solved: 496 Descri ...

最新文章

  1. Linux启动跟windows启动,Windows,Linux启动机制简介
  2. html5 居于页面中心,css笔记:如何让一个div居于页面正中间
  3. BERT在多模态领域中的应用
  4. JAVA——基于HttpClient的正方教务系统[1999-2020]模拟登录基本解决方案
  5. mstsc局域网远程 要预先做的设置
  6. Windows系统下多显示器模式开发
  7. LuaBridge 中C++类和继承示例
  8. 蓝桥杯2017初赛-正则问题
  9. 果园机器人的写作思路_《果园机器人》教学设计3篇
  10. c语言static int x,为什么要使用static_cast int (x)而不是(int)x?
  11. 服务器搭建网站完整教程(宝塔面板+wordpress) 快速搭建网站 一键部署
  12. C# MD5算法实现对文件校验
  13. 《Git与Github使用笔记》分享3款Git可视化工具
  14. 学堂在线计算机,学堂在线PC客户端
  15. selenium1、selenium2 示例代码(java版)
  16. Bilibili缓存视频在电脑端直接打开方式
  17. 商业银行2022年12月升级UKEY证书后故障
  18. 百度地图 控件——路网地图和影像地图切换
  19. 【9102年】考研还是找工作?分享看完心得体会(如果你错过了月亮,那就不要错过星星了)
  20. 电子扫描件怎么弄?这个方法值得了解

热门文章

  1. 吉时利2657A高功率数字源表-多功能高准度源表
  2. Axure-中继器结构与原理详解
  3. JY901串口数据接收与处理(Python)
  4. apple 产品鉴定
  5. 盘盘,这几个特殊的IP地址
  6. php发送邮件的新的体会。
  7. 使用Python办公自动化:将文本、表格及图片写入到Word
  8. EFM32 学习调试记录
  9. [日推荐]『淘内部优惠券工具』省钱小能手
  10. 手写数字识别网络结构