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[],*A,*B;
return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
} inline void read(int &x){
static char c;
while(!isdigit(C));x=c-'';
while(isdigit(C))x=x*+c-'';
} struct node{int y,c;};
int B,E,P,n,m,p[][],l[],h,t,vis[],dist[][],ans=2e9;
vector <node> a[]; void spfa1(){
h=t=;
memset(vis,,sizeof(vis));
l[++t]=;
dist[][]=;
while(h<t){
int front=l[++h];vis[front]=;
for(int i=;i<a[front].size();i++){
int to=a[front][i].y;
if(dist[front][]+B<dist[to][]){
dist[to][]=dist[front][]+B;
if(!vis[to])vis[to]=,l[++t]=to;
}
}
}
} void spfa2(){
h=t=;
memset(vis,,sizeof(vis));
l[++t]=;
dist[][]=;
while(h<t){
int front=l[++h];vis[front]=;
for(int i=;i<a[front].size();i++){
int to=a[front][i].y;
if(dist[front][]+E<dist[to][]){
dist[to][]=dist[front][]+E;
if(!vis[to])vis[to]=,l[++t]=to;
}
}
}
} void spfa3(){
h=t=;
memset(vis,,sizeof(vis));
l[++t]=n;
dist[n][]=;
while(h<t){
int front=l[++h];vis[front]=;
for(int i=;i<a[front].size();i++){
int to=a[front][i].y;
if(dist[front][]+P<dist[to][]){
dist[to][]=dist[front][]+P;
if(!vis[to])vis[to]=,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=;i<=m;i++){
read(p[i][]),read(p[i][]);
a[p[i][]].push_back((node){p[i][],});
a[p[i][]].push_back((node){p[i][],});
}
memset(dist,,sizeof(dist));
spfa1();spfa2();spfa3();
for(int i=;i<=n;i++){
ans=min(ans,dist[i][]+dist[i][]+dist[i][]);
}
printf("%d",ans);
fclose(stdin),fclose(stdout);
return ;
}

Piggy Back_KEY的更多相关文章

  1. [BZOJ1529][POI2005]ska Piggy banks

    [BZOJ1529][POI2005]ska Piggy banks 试题描述 Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个存钱罐的钥匙放 ...

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

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

  3. 3891: [Usaco2014 Dec]Piggy Back

    3891: [Usaco2014 Dec]Piggy Back Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 116  Solved: 92[Subm ...

  4. piggy.lzo

    编译内核的时候出现错误:arch/arm/boot/compressed/piggy.lzo.S:4: Error: file not found: arch/arm/boot/compressed/ ...

  5. piggy.lnk 简析

    piggy.lnk 简析 SECTIONS { .data : { input_len = .; LONG(input_data_end - input_data) input_data = .; * ...

  6. 【BZOJ1529】[POI2005]ska Piggy banks Tarjan

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

  7. bzoj1529 [POI2005]ska Piggy banks 并查集

    [POI2005]ska Piggy banks Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1508  Solved: 763[Submit][Sta ...

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

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

  9. 洛谷P3110 [USACO14DEC]驮运Piggy Back

    P3110 [USACO14DEC]驮运Piggy Back 题目描述 贝西和她的妹妹艾尔斯白天在不同的地方吃草,而在晚上他们都想回到谷仓休息.聪明的牛仔,他们想出了一个计划,以尽量减少他们在步行时花 ...

随机推荐

  1. 7.21.06 java内存模型

    资料来源:http://www.cnblogs.com/smile361/archive/2013/11/25/3441553.html 程序计数器: 当前线程所执行的字节码的行号指示器 本地方法栈: ...

  2. canvas自适应圆形时钟绘制

    前面的话 前面介绍过canvas粒子时钟的绘制,本文将详细介绍canvas自适应圆形时钟绘制 效果演示 最终自适应圆形时钟的效果如下所示 功能分析 下面来分析一下该圆形时钟的功能 [1]静态背景 对于 ...

  3. WireX:Android智能手机组成的DDoS僵尸网络

    阿里聚安全小编曾多次报道了官方应用市场出现恶意软件的事件,让大家在下载APP的时候三思而后行. 最近多家安全公司组成的安全研究小组发现了一个新的.传播广泛的僵尸网络,它是由成千上万的Android智能 ...

  4. Android辅助功能原理与基本使用详解-AccessibilityService

    辅助功能原理与基本使用详解 本文主要介绍辅助功能的使用 辅助功能基本原理 辅助功能基本配置和框架搭建 辅助功能实战解析 辅助功能基本原理   辅助功能(AccessibilityService)其实是 ...

  5. Java中的标识符和关键字

    1.标识符 含义:标识符用于给程序中的类.变量.方法命名的符号. 组成:数字(0-9).字母(a-z)(A-Z).下划线(_).美元符号$. 命名规则:1.数字不能够作为命名符号的开头 2.不能够使用 ...

  6. 深度解析C++拷贝构造函数

    自2003年开始,断断续续用了12年C++,直到这两年做物联网嵌入式开发,感觉对C++的掌握仅有10%左右.习惯了C#开发,C++倒显得难以下手!今天就一个函数返回问题跟辉月兄弟讨论一番,大有所获,足 ...

  7. Unix硬链接和符号链接(转)

    首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文 ...

  8. Django创建博客

    拜读http://www.cnblogs.com/fnng/p/3737964.html 后自操作步骤,mark一下 我的想法: modles.py中只负责添加类,定义数据结构,至于将该类添加到adm ...

  9. HTML基础1

    网页的基本结构(双标签):html,title 页面标题,head 网页上控制信息,body 页面内容,所有属性都写在前面. body的属性:bgcolor 背景色:text 文字颜色:margin ...

  10. java面向对象(五)之多态

    多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. ...