比赛 |
20150422 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
背驮式行走 |
最终得分 |
100 |
用户昵称 |
JSX |
运行时间 |
0.062 s |
代码语言 |
C++ |
内存使用 |
1.43 MiB |
提交时间 |
2015-04-22 09:53:02 |
显示代码纯文本
#include <cstring>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MAXN=40010;
template<class T>
inline void Read(T& x){
x=0; bool flag=0; char ch=getchar();
while(ch> '9' || ch< '0'){ if(ch=='-'){ flag=1; ch=getchar(); break; } ch=getchar();}
while(ch>='0' && ch<='9'){ x=x*10+ch-48; ch=getchar(); }
if(flag) x=-x;
}
struct node{
int to,next;
}E[MAXN<<1];
int line[MAXN],tot=0;
int B=0,e=0,P=0,N=0,M=0;
inline void Insert(int x,int y){
tot++; E[tot].to=y; E[tot].next=line[x]; line[x]=tot;
}
int Dis1[MAXN],Dis2[MAXN],Dis3[MAXN];
queue<int>Q; bool flag[MAXN];
inline void SPFA1(){
memset(Dis1,0x3f,sizeof(Dis1));
Q.push(1); Dis1[1]=0; flag[1]=true;
while(!Q.empty()){
int t=Q.front(); Q.pop(); flag[t]=false;
for(int i=line[t];i!=0;i=E[i].next){
int p=E[i].to;
if(Dis1[p]>Dis1[t]+B){
Dis1[p]=Dis1[t]+B;
if(!flag[p]){
flag[p]=true; Q.push(p);
}
}
}
}
}
inline void SPFA2(){
memset(Dis2,0x3f,sizeof(Dis2));
Q.push(2); Dis2[2]=0; flag[2]=true;
while(!Q.empty()){
int t=Q.front(); Q.pop(); flag[t]=false;
for(int i=line[t];i!=0;i=E[i].next){
int p=E[i].to;
if(Dis2[p]>Dis2[t]+e){
Dis2[p]=Dis2[t]+e;
if(!flag[p]){
flag[p]=true; Q.push(p);
}
}
}
}
}
inline void SPFA3(){
memset(Dis3,0x3f,sizeof(Dis3));
Q.push(N); Dis3[N]=0; flag[N]=true;
while(!Q.empty()){
int t=Q.front(); Q.pop(); flag[t]=false;
for(int i=line[t];i!=0;i=E[i].next){
int p=E[i].to;
if(Dis3[p]>Dis3[t]+P){
Dis3[p]=Dis3[t]+P;
if(!flag[p]){
flag[p]=true; Q.push(p);
}
}
}
}
}
int main(){
freopen("piggyback.in","r",stdin);
freopen("piggyback.out","w",stdout);
Read(B); Read(e); Read(P); Read(N); Read(M);
int x=0,y=0;
for(int i=1;i<=M;++i){
Read(x); Read(y);
Insert(x,y); Insert(y,x);
}
SPFA1(); SPFA2(); SPFA3();
int Ans=0x7f7f7f7f;
for(int i=1;i<=N;++i){
if(Ans>Dis1[i]+Dis2[i]+Dis3[i]) Ans=Dis1[i]+Dis2[i]+Dis3[i];
}
printf("%d\n",Ans);
fclose(stdin);
fclose(stdout);
return 0;
}